|
17 / 17 / 6
Регистрация: 30.04.2016
Сообщений: 227
|
||||||
Скорость отрисовки FillEllipse17.01.2026, 12:24. Показов 484. Ответов 4
Всем привет!
Есть необходимость посредством FillEllipse реализовать рисование кистью по прозрачному PictureBox. Однако отрисовка точек (читай: залитых миниокружностей) происходит не очень быстро. На рисунке виден результат выполнения кода при разной скорости движения мыши. Сам код взят с форума, просто немного подогнан для своих нужд (собственно тот же принцип и на сайте learn.microsoft описан):
-------------------------------------- Пробовал по PicBoxBoard.MouseMove запоминать текущие e.X, e.Y точки в PrevX, PrevY и на следующей итерации рисовать между новыми (e.X, e.Y) и (PrevX, PrevY) линию (DrawLine). На прямых линиях это помогает. Но на поворотах след кисти становиться "зубастым" по кромкам. -------------------------------------- Есть мысль по PicBoxBoard.MouseMove не рисовать, а писать в массив координаты кисти, а в отдельном потоке по этим координатам выводить FillEllipse. Как в фотошопе на старых ПК было: наелозишь мышью по листу, а он потом минуту дорисовывает... Но что-то подсказывает, что проблема не в FillEllipse, а в самом «MouseMove». Прошу помочь с направлениями решения данной проблемы. Как ускорить отрисовку FillEllipse? На learn.microsoft прочёл, что можно на основе стандартного PictureBox сделать свой, с двойной буферизацией, попробовал повторить, но вообще ни фига не понял и не смог ))))))
0
|
||||||
| 17.01.2026, 12:24 | |
|
Ответы с готовыми решениями:
4
FillEllipse рисует только в определенном квадрате на форме FillEllipse, DrawEllipse, внутри "прмитив" методом DrawLines не масштабируется Как Вы увеличиваете скорость отрисовки контролов? |
|
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 836
|
||||||
| 17.01.2026, 13:43 | ||||||
|
AlexNorton, Особо не заметил разницы в скорости если просто на пикчербоксе с использованием Bitmap или с двойной буферизацией:
1
|
||||||
|
17 / 17 / 6
Регистрация: 30.04.2016
Сообщений: 227
|
||
| 17.01.2026, 14:27 [ТС] | ||
|
Как и ожидалось - проблема не в FillEllipse, ну или, скорее, не только в нём.
Дискретность PicBoxBoard.MouseMove такая себе ))) Заменил рисование на запись координат в массив и результат удручает: если мышь двигать быстро - координат для работы получаем весьма не много (движение по горизонту): (391;881) (393;882) (398;884) (401;885) (406;886) (418;890) (426;893) (436;894) (461;900) (476;903) (493;906) (533;912) (558;916) (586;918) (617;920) (692;926) (731;929) (774;931) (816;933) (905;938) (948;940) (994;942) (1041;944) (1130;941) (1173;939) (1259;932) (1298;927) (1338;923) (1414;914) (1446;910) (1479;904) (1535;893) (1561;887) (1606;877) Местами есть пробелы по 40-50 точек... Как это обойти? Добавлено через 43 минуты И в любом случае спасибо: повторил, оценил, лично убедился в отсутствии смысла.
0
|
||
|
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 836
|
|||||||
| 17.01.2026, 14:34 | |||||||
|
AlexNorton,
0
|
|||||||
|
17 / 17 / 6
Регистрация: 30.04.2016
Сообщений: 227
|
||||||
| 17.01.2026, 16:50 [ТС] | ||||||
Сообщение было отмечено Тим70 как решение
Решение
Паабиидиииил! ))))
Сделал, как и говорил ранее - сравнивая расстояние между точками, только разрешил дорисовывать линию, если пропуск больше 5 точек. Получилось идеально! Лупит, как с пулемёта. С какой бы скоростью мышь не летала. Пилообразка по кромкам тоже пропала, потому что на поворотах линии больше не рисуются (ну в большинстве случаев ).
А vLoop = 0, чтоб он сработал в новом штрихе, делаю в PicBoxBoard.MouseUp.
1
|
||||||
| 17.01.2026, 16:50 | |
|
Помогаю со студенческими работами здесь
5
Скорость отрисовки DataGrindView Изменение отрисовки компонентов Нечитабельный шрифт из отрисовки под GDI Посоветуйте библиотеку для красивой отрисовки Pie chart'a Поиск библиотеки для отрисовки графа Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|