.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中,我可以用查看器打开文件等等…没有问题有人知道为什么会出现这个错误吗?

谢谢

.bmp不是Windows位图

您可以将System.Drawing.Bitmap保存为有效的windows .bmp文件,如下所示:

//bmp is a System.Drawing.Bitmap
bmp.Save("MyBitmap.bmp", ImageFormat.Bmp);

第二个参数(您没有包含的)指定必须保存位图的格式。

另外,一定要检查你的可视化库是否支持24Bit Per Pixel位图,因为这是你创建位图的格式。

看:PixelFormat.Format24bppRgb

如果没有指定编码器,您的图像将被保存为PNG。