如何使用LoadImage和StretchDIBits绘制PNG图像?

Meh*_*dad 3 c++ png gdi image stretchdibits

(这与如何使用Win32/GDI加载PNG图像的问题有关(如果可能,没有GDI +)?)

大家好,

我想知道,鉴于你有一个PNG资源嵌入带有ID的二进制文件中IDB_PNG1,并且LPDRAWITEMSTRUCT要绘制(这意味着你有HDC目标的矩形和矩形),你如何使用这个图像绘制到屏幕上StretchDIBits?我曾经BitBltTransparentBlt以前StretchDIBits一起工作,但似乎工作方式不同,LoadImage似乎不适用于PNG.

谢谢!

(注意:我使用的语言是C++,但这并不太重要...... C,C#,Visual Basic等都没问题;我只是想弄清楚步骤,而不是确切的代码.)

Bra*_*ger 9

我写了一篇博客文章(在显示带有C++的初始屏幕上),其中包含一个完整的代码示例,它从资源加载PNG并将其转换为HBITMAP(使用WIC).然后,您可以使用CreateCompatibleDC,SelectObject和BitBlt在目标HDC中显示它.

虽然我还没有尝试过,但是如果你将资源中的原始字节加载到内存中,你应该可以使用StretchDIBits直接显示PNG,并设置一个宽度,高度等的BITMAPINFOHEADER结构,如下所示.这个MSDN示例.

C#和VB.NET解决方案将完全不同,因为您可以使用System.Drawing(GDI +的包装器)或System.Windows.Media.Imaging(在WPF应用程序中)来处理图像加载和绘图.