3

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

大家好,

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

谢谢!

(注意:我输入的语言是 C++,但这不是太重要...... C、C#、Visual Basic 等都可以;我只是想弄清楚步骤,而不是所需的确切代码。)

4

2 回答 2

9

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

虽然我从未尝试过,但如果您将资源中的原始字节加载到内存中,您应该能够使用 StretchDIBits 直接显示 PNG,并设置一个具有宽度、高度等的 BITMAPINFOHEADER 结构,如中所示这个MSDN 示例

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

于 2010-12-31T05:18:59.423 回答
1

我认为位图中的 PNG 支持只供打印机驱动程序使用。对于屏幕显示,您可能必须使用一些代码自己解压缩 PNG 数据,例如libpng

于 2010-12-31T04:27:01.170 回答