2

我想将 BYTE* 转换为 gdi+ Image 对象。

我怎样才能做到这一点?

BYTE* 似乎是一个 Dib 点。

我发现 Image 有一个名为 Image::FromStream() 的方法可能会有所帮助,但我找不到任何关于如何将 BYTE* 转换为 IStream 对象的参考。我怎样才能做到这一点?

提前致谢!

实际上,很难相信 MS 提供了 IStream 接口,但没有提供任何实现该接口的 c++ MemoryStream 类。

4

3 回答 3

2

CreateStreamOnHGlobal将采用 HGLOBAL 并为您提供 IStream 指针。您需要使用 GlobalAlloc 分配足够的内存,然后将 BYTE 数组复制到 HGLOBAL 中。

如果你知道你得到的图像数据是一个 GDI DIB,你可以使用GdipCreateBitmapFromGdiDib或相应的 Bitmap::Bitmap 构造函数。

于 2008-11-04T09:52:40.057 回答
0

你知道BYTE指针指向的图像数据的格式吗?要使 Image 能够从流中构建自身,数据必须采用受支持的标准图像格式之一(GIF、PNG、JPEG 等)。

如果没有合适的“内存流”或类似的东西,IStream 接口看起来很简单,可以自己实现

于 2008-11-04T07:48:12.807 回答
0

使用SHCreateMemStream,

IStream* stream = ::SHCreateMemStream({your BYTE array}, {size of the array});
Gdiplus::Image *img = Gdiplus::Image::FromStream(stream);
于 2021-12-24T07:47:06.767 回答