我必须从字节数组中加载一个 1bpp 位图以将其提供给外部组件。该组件需要位图句柄。
我试图将它加载到一个Bitmap
对象并提供 的结果bitmap.GetHBitmap()
,但它看起来像在内部完成了一些奇怪的转换,并且生成的位图不再是 1bpp(当我提供组件的句柄时,它抱怨位深度) .
当我直接使用 Windows API 函数从文件加载位图时,LoadImage
它工作正常,但我不想从文件中读取它们,因为我已经在内存中拥有图像。将它们写入磁盘并再次读取它们是不必要的 I/O,并且会大大降低我的应用程序的速度。
如何获取位图的句柄,其数据位于字节数组中?
编辑:
我试过这段代码,但它显示了两个不同的图像。它应该显示相同的图像。
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(byte)) * imageData.Length);
try
{
Marshal.Copy(imageData, 0, ptr, imageData.Length);
handle = CreateBitmap(imgWidth, imgHeight, 1, 1, ptr);
ShowImage(Image.FromHbitmap(handle));
ShowImage(Image.FromStream(new MemoryStream(imageData)));
}
finally
{
Marshal.FreeHGlobal(ptr);
}