Что быстрее с PictureBox? Много маленьких перерисовок или полная перерисовка - PullRequest
1 голос
/ 12 мая 2010

У меня есть PictureBox (WinMobile 6 WinForm), на котором я рисую некоторые изображения. Есть фоновое изображение, которое идет в фоновом режиме, и оно не меняется. Однако объекты, которые нарисованы на картинке, перемещаются во время приложения, поэтому мне нужно обновить фон.

Поскольку элементы, которые перерисовываются, занимают от 50% до 80% поверхности, вопрос в том, какой из них быстрее:

1) Перерисовать только те части фонового изображения, которые были изменены (предыдущее + следующее местоположение движущегося объекта).

2) Перерисовать весь фон, а затем нарисовать все объекты в их текущем положении.

Теперь причина вопроса в том, что я не уверен, какая мощность процессора требуется для одной операции drawImage и каковы факторы, отнимающие много времени.

Я знаю, что если фон почти полностью покрыт, было бы глупо перерисовывать его части, потому что, рисуя фрагменты, я нарисовал полную картину. Но поскольку иногда изменялась только половина изображения (некоторые объекты оставались в прежнем положении), может быть (возможно) полезно перерисовать только эти области. Но мне нужно ваше понимание этого ...

Спасибо.

1 Ответ

0 голосов
/ 14 июня 2010

Меньше количество DrawImage лучше, так как он использует GDI + для рендеринга и идет очень медленно. Я бы порекомендовал использовать BitBlt старого GDI вместо DrawImage.

При этом вы можете поместить все необходимые части во временную основу (Graphics obj), а затем сразу поместить все в PictureBox. Если вы игнорируете в своей петле все части, которые находятся за пределами видимого экрана, это должно работать быстро.

...