(这与问题有关如何使用 Win32/GDI 加载 PNG 图像(如果可能,不要使用 GDI+)? https://stackoverflow.com/questions/4567875/how-would-i-load-a-png-image-using-win32-gdi-no-gdi-if-possible.)
Hi all,
我想知道,假设您有一个 PNG 资源嵌入到带有 ID 的二进制文件中IDB_PNG1
, 和LPDRAWITEMSTRUCT
吸引(所以这意味着你有HDC
以及目标的矩形),如何使用该图像将该图像绘制到屏幕上StretchDIBits
?我曾与BitBlt
and TransparentBlt
之前,但是StretchDIBits
似乎工作方式不同,并且LoadImage
似乎不适用于 PNG。
谢谢你!
(注意:我使用的语言是 C++,但这并不是太重要......C、C#、Visual Basic 等都可以;我只是想弄清楚步骤,而不是所需的确切代码。)
我写了一个博客文章 https://faithlife.codes/blog/2008/09/displaying_a_splash_screen_with_c_part_i/(使用 C++ 显示启动屏幕)包含完整的代码示例,该示例从资源加载 PNG 并将其转换为 HBITMAP(使用WIC http://msdn.microsoft.com/en-us/library/ee719902(v=VS.85).aspx)。然后,您可以使用 CreateCompatibleDC、SelectObject 和 BitBlt 将其显示在目标 HDC 中。
虽然我从未尝试过,但如果将资源中的原始字节加载到内存中,并设置具有宽度、高度等的 BITMAPINFOHEADER 结构,则应该能够使用 StretchDIBits 直接显示 PNG,如中所示这MSDN样本 http://msdn.microsoft.com/en-us/library/dd145107(v=VS.85).aspx.
C# 和 VB.NET 解决方案将非常不同,因为您可以使用 System.Drawing(GDI+ 的包装器)或 System.Windows.Media.Imaging(在 WPF 应用程序中)来处理图像加载和绘制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)