【问题标题】:Create a BITMAPINFO from a JPG/PNG file in Windows C++在 Windows C++ 中从 JPG/PNG 文件创建 BITMAPINFO
【发布时间】:2011-08-07 08:01:44
【问题描述】:

我在 API 中有一个函数,我正在使用该函数请求 BITMAPINFO 指针。我想给这个函数一个图像。我的图像是 JPG/PNG。假设我将它们转换为 BMP 文件,我仍然不知道如何设置这个结构。有我可以使用的 Windows API 吗?

【问题讨论】:

    标签: c++ windows image bitmap


    【解决方案1】:

    快速谷歌搜索此 MSDN 文章:Sizing a JPEG or PNG Image,其中显示了为 JPEG 文件填充 BITMAPINFO 的一种方法(适用于 PNG)。

    使用该页面左侧的链接获取有关位图 API 的更多信息。

    【讨论】:

    • 请注意,BITMAPINFO 的这种格式可能不适用于 StretchDIBits 以外的函数。
    【解决方案2】:

    您可以为此使用 GDI+。
    使用 Gdiplus::Bitmap::FromFile 读取 BMP/JPG/PNG/GIF 以加载,Gdiplus::Bitmap::GetHBITMAP 以访问 HBITMAP 然后 BITMAPINFO

    【讨论】:

    • 那将使用 GDI+,而不是 GDI。
    • HBITMAPBITMAPINFO 之间的联系并不明显。 GetObject 函数将基于HBITMAP 填充DIBSECTION 结构,DIBSECTION 使用与BITMAPINFOHEADER 相同的BITMAPINFOHEADER 子结构@。
    • 我不明白如何从HBITMAP 访问BITMAPINFO。代码示例会很有帮助。
    【解决方案3】:

    PNG 可能具有 AlphaChannel/透明度信息 - 在转换为位图时会丢失。您需要 BITMAPINFO 的功能实际上是做什么的?

    如果您的方法是将文件转换为位图;不要在运行时这样做。 使用绘图程序将文件转换为 bmp。

    如前所述,您可以使用 GDI+ 来利用几种不同的原生格式; 但这样做可能需要将您现有的 GDI 调用转换为 GDI+。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-13
      • 2021-09-03
      • 1970-01-01
      • 2012-09-12
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多