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

Winapi 需要独立于设备的位图位 我在C++中构建了一个DLL,导入到一个VB项目中。dll公开了一个函数,该函数将通过Win Shell提取指定文档的预览图像,然后将其写入缓冲区供VB应用程序使用,winapi,getdibits,Winapi,Getdibits,到目前为止,我能够毫无问题地获得HBITMAP句柄。我还能够使用GetBitmapBits函数提取位图数据。但是,这将不起作用,因为需要位数据的对象需要位数据采用独立于设备的格式 我已经读到GetDiBits是用于此目的的函数,但是我很难弄清楚如何成功调用该函数 我应该使用什么设备上下文?此外,我如何确保它以独立于设备的格式写出数据 提前感谢。如果您的HBITMAP引用了设备相关位图,并且您需要与设备无关的位,则必须对其进行转换。尝试创建一个CImage并调用BitBlt方法,将设备无关的位放入

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

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

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


提前感谢。

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

谢谢您的帮助,但设备上下文仍然让我感到厌烦。因此,我在这个项目上取得了一些进展。我找到了关于GetDiBits函数()的辅助帮助文档。api文档根本没有解释在头结构上执行的检查列表。现在这已经不存在了,我成功地执行了这个函数并提取了一些位图数据。现在我遇到的问题显然是设备上下文或其他问题。我正在用一个24位颜色的100x100像素图像测试我的代码。使用GetDiBits提取的数据的大小正是该大小图像的预期大小。然而,DIB应该有额外的数据,例如头等等,以便可以在设备之间传递。因此,也许我甚至没有为这个使用正确的函数?作为提醒,我需要将DIB数据传递给vb项目中的对象。