我想将 BYTE* 转换为 gdi+ Image 对象。
我怎样才能做到这一点?
BYTE* 似乎是一个 Dib 点。
我发现 Image 有一个名为 Image::FromStream() 的方法可能会有所帮助,但我找不到任何关于如何将 BYTE* 转换为 IStream 对象的参考。我怎样才能做到这一点?
提前致谢!
实际上,很难相信 MS 提供了 IStream 接口,但没有提供任何实现该接口的 c++ MemoryStream 类。
CreateStreamOnHGlobal将采用 HGLOBAL 并为您提供 IStream 指针。您需要使用 GlobalAlloc 分配足够的内存,然后将 BYTE 数组复制到 HGLOBAL 中。
如果你知道你得到的图像数据是一个 GDI DIB,你可以使用GdipCreateBitmapFromGdiDib或相应的 Bitmap::Bitmap 构造函数。
你知道BYTE
指针指向的图像数据的格式吗?要使 Image 能够从流中构建自身,数据必须采用受支持的标准图像格式之一(GIF、PNG、JPEG 等)。
如果没有合适的“内存流”或类似的东西,IStream 接口看起来很简单,可以自己实现。
IStream* stream = ::SHCreateMemStream({your BYTE array}, {size of the array});
Gdiplus::Image *img = Gdiplus::Image::FromStream(stream);