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


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

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

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

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

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

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

1 3

1 ответ:

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

Дополнительную информацию смотрите в статье MSDN.

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