.bmp不是Windows位图
本文关键字:位图 Windows 不是 bmp | 更新日期: 2023-09-27 17:50:43
当我创建这样的位图时:
var testImage = new Bitmap(320, 240);
var testDataLock = testImage.LockBits(new Rectangle(new Point(), testImage.Size),
System.Drawing.Imaging.ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
unsafe
{
var aaa = CamData.ToArray();
UInt32 lOffset = 0;
UInt32 lPos = 0;
byte* lDst = (byte*)testDataLock.Scan0;
byte bitshift = 8;
fixed (UInt16* lSrc = aaa)
{
while (lOffset < testImage.Width * testImage.Height)
{
lDst[lPos] = (byte)(lSrc[lOffset] >> bitshift);
lDst[lPos + 1] = lDst[lPos];
lDst[lPos + 2] = lDst[lPos];
lOffset++;
lPos += 3;
// take care of the padding in the destination bitmap
if ((lOffset % testImage.Width) == 0)
lPos += (UInt32)testDataLock.Stride - (uint)(testImage.Width * 3);
}
}
}
testImage.UnlockBits(testDataLock);
testImage.Save(@"H:'Test.bmp");
我总是得到一个错误,而试图打开这个文件与可视化库:
Unknown file type! H:'test.bmp is not a Windows BMP file!
但是在windows中,我可以用查看器打开文件等等…没有问题有人知道为什么会出现这个错误吗?
谢谢
您可以将System.Drawing.Bitmap
保存为有效的windows .bmp文件,如下所示:
//bmp is a System.Drawing.Bitmap
bmp.Save("MyBitmap.bmp", ImageFormat.Bmp);
第二个参数(您没有包含的)指定必须保存位图的格式。
另外,一定要检查你的可视化库是否支持24Bit Per Pixel位图,因为这是你创建位图的格式。
看:PixelFormat.Format24bppRgb
如果没有指定编码器,您的图像将被保存为PNG。