(这与How would I load a PNG image using Win32/GDI (no GDI+ if possible)?上的问题有关。)
大家好,
我很想知道,因为你有一个PNG资源嵌入了一个标识为IDB_PNG1
的二进制文件中,并且有一个LPDRAWITEMSTRUCT
来绘制(这意味着你拥有HDC
以及目标的矩形),如何使用StretchDIBits
将该图像绘制到屏幕上?我以前曾与BitBlt
和TransparentBlt
合作,但StretchDIBits
似乎工作方式不同,LoadImage
似乎与PNG无关。
谢谢!
(注意:我说的语言是C ++,但这不太重要...... C,C#,Visual Basic等都没关系;我只是想弄清楚步骤,而不是确切的代码需要。)
答案 0 :(得分:9)
我写了一个blog post(在显示带有C ++的初始屏幕上),其中包含一个完整的代码示例,它从资源加载PNG并将其转换为HBITMAP(使用WIC)。然后,您可以使用CreateCompatibleDC,SelectObject和BitBlt将其显示在目标HDC中。
虽然我还没有尝试过,但是如果你将资源中的原始字节加载到内存中,你应该可以使用StretchDIBits直接显示PNG,并设置一个宽度,高度等的BITMAPINFOHEADER结构。如MSDN sample中所示。
C#和VB.NET解决方案将完全不同,因为您可以使用System.Drawing(GDI +的包装)或System.Windows.Media.Imaging(在WPF应用程序中)来处理图像加载和绘图。
答案 1 :(得分:1)
我认为位图内的PNG支持仅供打印机驱动程序使用。对于屏幕显示,您可能需要使用某些代码(例如libpng)自行解压缩PNG数据。