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次のように、を有効なwindows.bmpに保存できます。

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

2番目のパラメーター(含めなかった)は、ビットマップを保存する必要がある形式を指定します。

また、ビジュアライゼーションライブラリが24Bit Per Pixelビットマップをサポートしているかどうかを必ず確認してください。これは、ビットマップを作成する形式です。

見る: PixelFormat.Format24bppRgb

于 2011-04-20T08:07:11.023 に答える
1

MSDNの備考セクションで読むことができるように、エンコーダーが指定されていない場合、画像はPNGとして保存されます。

于 2011-04-20T08:15:27.040 に答える