2014-02-21 3 views
0

У меня есть существующий буфер, заполненный битовыми данными (DIB), то есть ширина x высота x 4 байта (RGBA). Я хочу сделать это растровое изображение на экране, но, глядя на функции CreateBitmap .../CreateDIB ..., они, похоже, не выполняют то, что я ищу. Я не хочу копировать память, я хочу сохранить доступ к ней, поэтому я могу продолжать писать ее в следующем кадре (без ущерба для копирования данных). Существует ли такой метод, или мне нужно создать новое растровое изображение и вызвать SetDIBits на нем?Создание HBITMAP из существующего буфера

+0

У вас есть необработанный буфер буфера и хотите нарисовать его на экране? –

ответ

0

Вы не можете написать DIB непосредственно в контекст устройства - вам нужно будет создать растровое изображение и скопировать пиксели. Раздражаю, я знаю!

Похоже, this question имеет сжатый способ сделать это в принятом ответе.

+0

Да, я видел этот вопрос, но, к сожалению, принятый ответ использует GDI +, который я не могу использовать. –

+0

Это позор. Ну, это «SetDIBits» и возможное преобразование пикселей для вас! Надеюсь, все будет хорошо. – noelicus

1

Если вам нужен простой код, вы можете использовать структуру BITMAP и назначить его bmBits для указания фактических данных изображения (RGBA 8 бит).

Затем вы можете использовать метод GDI

HBITMAP CreateBitmapIndirect(const BITMAP *pbm); 

создать HBITMAP для отображения изображения на экране.

Но на самом деле я думаю, что система все еще выполняет копирование при создании HBITMAP, поэтому после возврата CreateBitmapIndirect вы можете безопасно освобождать свои данные изображения.

Но по крайней мере вам нужно только создать буфер один раз и использовать его несколько раз, пока размер изображения не изменится.

Я использую этот метод для отображения необработанного видео с камеры RED.

Смежные вопросы