Самый быстрый метод для удаления из буфера пикселей в контекст устройства - PullRequest
3 голосов
/ 18 января 2011

Добрый вечер,

У меня есть несколько 32-битных изображений в буферах памяти, которые я хочу быстро "перетянуть" в контекст устройства.Скорость - проблема здесь, потому что буфер будет постоянно манипулироваться и его необходимо постоянно подключать к DC.

Глубина цвета буфера составляет 32 бита, поэтому он уже находится в ожидаемом DIB форматеSetDIBits ().Однако это довольно громоздко, поскольку цель битовой карты SetDIBits () уже не может быть выбрана в DC до операции.Поэтому мне нужно будет постоянно менять битовую карту контроллера домена, вызывать SetDIBits (), снова менять битовую карту в контроллере домена, а затем подключать контроллер домена к контроллеру окна.На мой взгляд, это просто большая нагрузка на ЦП и слишком большая разветвленность в Windows API;слишком много для оптимальной производительности.

Мне было бы интересно использовать DirectX, если бы он не заставлял меня использовать контексты устройств для 2D-операций или загружать текстуры в видеопамять перед их отображением, потому что содержимоеизображение постоянно меняется.

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

Спасибо за чтение моей длинной записи.

1 Ответ

2 голосов
/ 18 января 2011

Существует метод API CreateDIBSection для создания DIB, в который приложения могут писать напрямую. Это позволяет постоянно обновлять растровое изображение (либо записывать в память, либо непосредственно записывать в него).

Подробнее см. В статье MSDN.

Доступ к растровому изображению должен быть синхронизирован. Сделайте это, вызвав функцию GdiFlush.

...