【问题标题】:Need device independent bitmap bits需要与设备无关的位图位
【发布时间】:2011-11-17 07:05:08
【问题描述】:

我正在用 C++ 构建一个要导入 VB 项目的 dll。该dll公开了一个函数,该函数将通过Win Shell提取指定文档的预览图像,然后将其写入缓冲区以供VB应用程序使用。

到目前为止,我能够毫无问题地获取 HBITMAP 句柄。我还能够使用 GetBitmapBits 函数提取位图数据。但是,这不起作用,因为需要位数据的对象需要它是与设备无关的格式。

我读到 GetDiBits 是用于此目的的函数,但我很难弄清楚如何成功调用该函数。

我应该使用什么设备上下文?另外,如何确保它以独立于设备的格式写出数据?

提前致谢。

【问题讨论】:

  • 所以,我在这个项目上取得了一些进展。我找到了关于 GetDiBits 函数的辅助帮助文档 (support.microsoft.com/kb/74601)。 api 文档根本没有解释在标头结构上执行的检查列表。所以现在已经不碍事了,我能够成功执行该函数并提取一些位图数据。
  • 现在我遇到的问题显然是设备上下文或其他问题。我正在使用 24 位颜色的 100x100 像素图像测试我的代码。使用 GetDiBits 提取的数据大小正是该大小图像的预期大小。但是,DIB 应该具有额外的数据,例如标头和其他数据,以便可以在设备之间传递。所以也许我什至没有为此使用正确的功能?提醒一下,我需要将 DIB 数据传递给 vb 项目中的对象。

标签: winapi getdibits


【解决方案1】:

如果您的 HBITMAP 引用了与设备相关的位图,并且您需要与设备无关的位,则必须对其进行转换。尝试创建一个 CImage 并调用 BitBlt 方法将独立于设备的位放入其中。

【讨论】:

  • 感谢您的帮助,但设备上下文仍然让我失望。
猜你喜欢
  • 2019-08-26
  • 2015-11-19
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 2020-09-23
  • 2020-09-03
相关资源
最近更新 更多