【发布时间】:2011-08-07 08:01:44
【问题描述】:
我在 API 中有一个函数,我正在使用该函数请求 BITMAPINFO 指针。我想给这个函数一个图像。我的图像是 JPG/PNG。假设我将它们转换为 BMP 文件,我仍然不知道如何设置这个结构。有我可以使用的 Windows API 吗?
【问题讨论】:
我在 API 中有一个函数,我正在使用该函数请求 BITMAPINFO 指针。我想给这个函数一个图像。我的图像是 JPG/PNG。假设我将它们转换为 BMP 文件,我仍然不知道如何设置这个结构。有我可以使用的 Windows API 吗?
【问题讨论】:
快速谷歌搜索此 MSDN 文章:Sizing a JPEG or PNG Image,其中显示了为 JPEG 文件填充 BITMAPINFO 的一种方法(适用于 PNG)。
使用该页面左侧的链接获取有关位图 API 的更多信息。
【讨论】:
BITMAPINFO 的这种格式可能不适用于 StretchDIBits 以外的函数。
您可以为此使用 GDI+。
使用 Gdiplus::Bitmap::FromFile 读取 BMP/JPG/PNG/GIF 以加载,Gdiplus::Bitmap::GetHBITMAP 以访问 HBITMAP 然后 BITMAPINFO
【讨论】:
HBITMAP 和 BITMAPINFO 之间的联系并不明显。 GetObject 函数将基于HBITMAP 填充DIBSECTION 结构,DIBSECTION 使用与BITMAPINFOHEADER 相同的BITMAPINFOHEADER 子结构@。
HBITMAP 访问BITMAPINFO。代码示例会很有帮助。
PNG 可能具有 AlphaChannel/透明度信息 - 在转换为位图时会丢失。您需要 BITMAPINFO 的功能实际上是做什么的?
如果您的方法是将文件转换为位图;不要在运行时这样做。 使用绘图程序将文件转换为 bmp。
如前所述,您可以使用 GDI+ 来利用几种不同的原生格式; 但这样做可能需要将您现有的 GDI 调用转换为 GDI+。
【讨论】: