Как бы я нарисовал изображение в формате PNG, используя LoadImage и StretchDIBits? - PullRequest
3 голосов
/ 31 декабря 2010

(Это связано с вопросом на Как мне загрузить изображение PNG с использованием Win32 / GDI (без GDI +, если возможно)? .)

Привет всем,

Мне было интересно, учитывая, что у вас есть ресурс PNG, встроенный в двоичный файл с идентификатором IDB_PNG1 и LPDRAWITEMSTRUCT для рисования (это означает, что у вас есть HDC и прямоугольник для вашей цели)Как вы рисуете это изображение на экране, используя StretchDIBits?Я работал с BitBlt и TransparentBlt раньше, но StretchDIBits, кажется, работает по-другому, и LoadImage, похоже, не работает с PNG.

Спасибо!

(Примечание: я поставил язык C ++, но это не так уж важно ... C, C #, Visual Basic и т. Д. Было бы хорошо; я просто пытаюсь выяснить шаги, а не точный необходимый код.)

Ответы [ 2 ]

9 голосов
/ 31 декабря 2010

Я написал сообщение в блоге (при отображении заставки с C ++), которое содержит полный пример кода, который загружает PNG из ресурса и преобразует его в HBITMAP (используя WIC * 1004). *). Затем можно использовать CreateCompatibleDC, SelectObject и BitBlt, чтобы отобразить его в целевом HDC.

Хотя я никогда не пробовал этого, вы сможете использовать StretchDIBits для непосредственного отображения PNG, если вы загрузите необработанные байты из ресурса в память и настроите структуру BITMAPINFOHEADER с шириной, высотой и т. Д. как показано в этом примере MSDN .

Решения C # и VB.NET были бы совершенно другими, потому что вы могли бы использовать System.Drawing (оболочка для GDI +) или System.Windows.Media.Imaging (в приложении WPF) для обработки загрузки и рисования изображений.

1 голос
/ 31 декабря 2010

Я думаю, что поддержка PNG внутри растровых изображений действительно только для использования драйверами принтера. Для отображения экрана вам, вероятно, придется самостоятельно распаковать данные PNG, используя некоторый код, такой как libpng .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...