保存位图时出现的GDI+通用错误显然是一个常见问题,根据我在SO和网络上的研究。以下是一个简化的片段:
这将导致0x80004005通用错误。据说这种情况通常是由于组件锁定引起的,但我在这里没有看到任何东西。难道我只是瞎了吗?我要保存的路径当然存在,只创建了一个空的bmp文件(0B)。
背景:我从相机驱动程序获取像素数据,并使用C++/CLI包装器将其传输到.NET,因此上面的Bitmap对象是通过函数调用返回的。但由于这个小例子已经失败了,所以我想适配器没有问题。
非常感谢您提供任何建议!
byte[] bytes = new byte[2048 * 2048 * 2];
for (int i = 0; i < bytes.Length; i++)
{
// set random or constant pixel data, whatever you want
}
Bitmap bmp = new Bitmap(2048, 2048, PixelFormat.Format16bppGrayScale);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, 2048, 2048), ImageLockMode.ReadWrite, bmp.PixelFormat);
System.Runtime.InteropServices.Marshal.Copy(bytes, 0, bmpData.Scan0, 8388608);
bmp.UnlockBits(bmpData);
bmp.Save(@"name.bmp");
这将导致0x80004005通用错误。据说这种情况通常是由于组件锁定引起的,但我在这里没有看到任何东西。难道我只是瞎了吗?我要保存的路径当然存在,只创建了一个空的bmp文件(0B)。
背景:我从相机驱动程序获取像素数据,并使用C++/CLI包装器将其传输到.NET,因此上面的Bitmap对象是通过函数调用返回的。但由于这个小例子已经失败了,所以我想适配器没有问题。
非常感谢您提供任何建议!
bmp.Save(@"name.bmp", ImageFormat.Png);
替换上述代码也无法实现。 - simdImageFormat.Bmp
。请看我的最后一条评论,显然不支持Format16bppGrayscale
。但是,我仍在努力将位图保存为16bpp的PNG格式。 - simd