0

当我创建这样的位图时:

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

谢谢

4

2 回答 2

2

您可以System.Drawing.Bitmap像这样将 a 保存到有效的 Windows .bmp 中:

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

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

此外,请务必检查您的可视化库是否支持 24Bit Per Pixel 位图,因为这是您创建位图的格式。

看: PixelFormat.Format24bppRgb

于 2011-04-20T08:07:11.023 回答
1

正如您可以在 MSDN的备注部分中阅读的那样,如果未指定编码器,您的图像将保存为 PNG。

于 2011-04-20T08:15:27.040 回答