Как обернуть существующий буфер памяти как DC в родной win32? - PullRequest
2 голосов
/ 18 ноября 2011

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

Возможно ли это без копирования данных изображения вокруг?

Когда я смотрю на страницу CreateDC () msdn, ему нужно имя драйвераи устройство.Но DC не должен быть совместимым с любым устройством.Кроме того, я не хочу, чтобы результат был другим, если дисплей работает с глубиной цвета 16 или 32 бита.Я думаю, что мне нужен DC, совместимый с моим макетом памяти, не совместимый с каким-либо устройством.Как я могу это сделать?

Thx Marc

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

CreateDIBSection позволяет указать, где хранится память для растрового изображения.Однако он должен находиться в разделе с отображением в памяти.

1 голос
/ 18 ноября 2011

Вам необходимо создать растровое изображение и выбрать это растровое изображение в вашем DC . Растровое изображение создается с использованием буфера памяти.

Ue либо CreateBitmap (зависит от устройства), либо CreateDIBitmap (не зависит от устройства; это то, что я бы порекомендовал, особенно если вы этого не хотите зависит от глубины цвета дисплея - это означает, что он должен быть независимым от устройства.) Оба имеют параметры, указывающие на существующий буфер памяти. Например, для CreateDIBitmap необходимо передать флаг CBM_INIT, а затем передать указатель на буфер в качестве параметра lpbInit. Вам также нужно будет передать структуру BITMAPINFO, которая описывает формат растрового изображения.

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

(Возможно, вы захотите использовать CreateCompatibleDC вместо CreateDC, между прочим, зависит, но часто это то, что вам нужно.)

Для получения дополнительной информации об использовании контроллеров домена и растровых изображений прочитайте что-то вроде в этой статье . (Я не уверен по вашему вопросу, насколько вы знакомы с ними или с общим программированием GDI.)

...