Самый быстрый метод для удаления из буфера пикселей в контекст устройства

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

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

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

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

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

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

1 ответ

Решение

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

См. Статью MSDN для получения дополнительной информации.

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

Другие вопросы по тегам