Как работает Photoshop (или программы для рисования)? - PullRequest
8 голосов
/ 20 мая 2010

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

Я не понимаю, как Photoshop может перемещать целые слои без задержки или мерцания без использования аппаратного ускорения. Также в такой программе, как Expression Design, я мог иметь 200 фигур и перемещать их одновременно без задержки. Мне действительно интересно, как это можно сделать без помощи графического процессора.

Кроме того, я не думаю, что суперэффективные алгоритмы могли бы оправдать это?

Ответы [ 3 ]

1 голос
/ 20 мая 2010

Посмотрите на этот вопрос:

Уменьшение мерцания с помощью GDI + и C ++

Все, что вы можете сделать для рисования DC без графического процессора, это уменьшить мерцание. Все остальное зависит от скорости заполнения вашей памяти. И здесь вы можете использовать эффективные алгоритмы, многопоточность и все, что вам нужно.

1 голос
/ 20 мая 2010

Двойная (или более) буферизация - это то, как это делается в играх, где мы рисуем тонну дерьма в «задний» буфер, пока отображается «передний» буфер. Затем, когда отрисовка завершена, буферы меняются местами (замена указателей, а не копий!), И процесс продолжается в новых переднем и заднем буферах.

Тройная буферизация предлагает еще один бонус: вы можете начать рисовать два кадра с этого момента, когда следующий кадр сделан, но без принудительной замены буфера в середине обновления экрана. Многие игры выполняют замену буфера в середине обновления, но иногда вы можете видеть это как видимые артефакты (разрывы) на экране.

В любом случае - для приложения, рисующего растровые изображения в окне, если у вас есть какая-то «медленная» операция, сделайте это в неотображаемый буфер при представлении отображаемой версии API рендеринга, например GDI. Позвольте системному программному обеспечению обработать все модные обновления.

1 голос
/ 20 мая 2010

Конечно, современный Photoshop использует ускорение GPU , если доступно. Другой возможный инструмент - DMA . Вам также может быть полезно прочитать исходный код существующих программ, таких как GIMP .

...