Как Paint .NET может так быстро рисовать с помощью C #? Пример: периметр эллипса рисуется во время перетаскивания мыши без видимой задержки. В простом приложении Windows Form на C #. Если вы используете событие MouseMove для Picturebox и нарисуете эллипс в зависимости от положения мыши, будет много задержек и мерцания! Итак, как они это делают так гладко?
Как добиться плавного рисования с помощью C # (например, Paint .NET)?
comment
Отличный вопрос - вероятно, не относится к S.O., но все же отличный вопрос.
- person Nick Vaccaro   schedule 07.02.2012
comment
blogs.msdn.com/ b / directx / archive / 2009/08/14 /
- person ken2k   schedule 07.02.2012
comment
Вот ссылка на ответ, в котором есть советы от автора Paint.NET stackoverflow.com/a/11025428/11425141
- person Phillip S   schedule 24.09.2019
Ответы (4)
У меня нет специальных знаний о коде Paint.Net, но, скорее всего, он использует двойную буферизацию и, вероятно, реализованы вручную на настраиваемой поверхности для рисования, а не в упрощенной реализации в предварительно упакованных элементах управления.
person
Joel Coehoorn
schedule
07.02.2012
Спасибо. Я буду искать какой-нибудь образец БД, чтобы увидеть, действительно ли он улучшает рисунок.
- person Pedro77; 07.02.2012
Paint.NET вызывает Update () после вызова Invalidate (), который вызывает немедленное синхронное WM_PAINT.
person
Rick Brewster
schedule
22.03.2012
Чтобы уточнить детали нижнего уровня:
Invalidate()
в WinForms вызывает встроенную функцию InvalidateRect()
. Update()
называет родной UpdateWindow()
. Refresh()
аналогично вызову Invalidate(true)
, за которым следует Update()
.
- person Rick Brewster; 15.12.2015
Чтобы рисунок получился гладким, вам необходимо:
- Использовать двойную буферизацию (http://msdn.microsoft.com/en-us/library/b367a457.aspx)
- Используйте специальный инструментарий для рендеринга (OpenGL / DirectDraw и т. Д.)
В этом случае лучше всего использовать двойную буферизацию - она поддерживается «из коробки» в .NET framework, требует очень мало работы и устраняет мерцание.
person
Dave Kerr
schedule
07.02.2012
Я думаю, что двойная буферизация не решит проблему задержки, которая становится более ясной, когда мышь перемещается быстрее и между ее положением и нарисованным эллипсом начинает появляться зазор.
- person Pedro77; 07.02.2012
Вероятно, они используют WPF. Это намного быстрее, чем формы.
person
Pedro77
schedule
15.02.2012