Это дешевле для dc-> DrawLine () кучу раз или один удар? - PullRequest
1 голос
/ 29 мая 2009

У меня есть элемент управления с сеткой. Является ли более дорогим рисовать горизонтальные и вертикальные линии, которые составляют сетку каждый раз, с использованием функции рисования линий в классе контекста устройства, или будет быстрее нарисовать сетку один раз в контексте устройства памяти, а затем каждый раз перетаскивать ее для окно постоянного тока? Спасибо.

Ответы [ 6 ]

5 голосов
/ 29 мая 2009

Это зависит от многих вещей, в том числе от того, сколько у вас линий, насколько велика сетка и какая видеокарта у пользователя.

Лучше всего сделать один из них (вероятно, DrawLine, который, как мне кажется, будет проще и быстрее), а затем протестировать его на медленной машине. Если он работает и работает достаточно быстро, не оптимизируйте его преждевременно.

2 голосов
/ 29 мая 2009

Другой вариант: Создайте кисть с рисунком сетки и просто FillRect() область. По моему опыту, в большинстве случаев это самый быстрый способ сделать это.

Однако "RichieHindle" прав; нет необходимости в философии, если вы можете иметь факты, просто измеряя скорость;) ..

1 голос
/ 29 мая 2009

A сделал такой контроль, и я нарисовал границу для каждой ячейки, когда пришло время обновить ячейку. (Это просто альтернативная мысль)

0 голосов
/ 30 мая 2009

Блиттинг является предпочтительным, так как он будет копировать изображение в память. Копирование изображения должно предотвращать мерцание при его рисовании.

0 голосов
/ 30 мая 2009

Краткий ответ: последнее. Бегство к DC памяти один раз, чтобы его можно было использовать в качестве растрового изображения для последующих операций перерисовки, обычно является более быстрым подходом для рендеринга.

0 голосов
/ 29 мая 2009

Это также зависит от того, какую ручку вы используете. Для простых сплошных цветных горизонтальных и вертикальных линий заливка прямоугольников IIRC обычно является самой быстрой, но провести сравнительный анализ достаточно просто.

...