2011-04-20 13 views
0

私はこのようなビットマップの作成:可視化LIBでこのファイルを開くしようとしているときに、私はなかれエラーを取得する.bmpはWindowsのビットマップではありませんか?

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に私が使用してファイルを開くことができますビューアなど...何も問題はありません 誰も私がこのエラーをなぜ知っていますか?

おかげ

答えて

2

あなたは有効なWindowsにSystem.Drawing.Bitmapを保存することができ、このように.BMP:(あなたが含まれていませんでした)

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

2番目のパラメータは、ビットマップを保存しなければならない形式を指定します。また

、これはあなたがあなたのビットマップを作成しているフォーマットであるため、 、ビジュアライゼーションのlibには、24ビットパーピクセルのビットマップをサポートしているかどうか確認してください

参照: PixelFormat.Format24bppRgb

+0

これです。私はどのフォーマットがデフォルトで選択されるのかよく分かりませんが、明示的であることは常に良いことです。 –

+0

oohとても簡単:)、ありがとう:) – h0ppel

1

あなたがread at MSDNようにエンコーダが指定されていない場合、備考セクションに画像がPNGとして保存されます。

+0

エンコーダを指定しなかった場合、正確に何が起きるかチェックすることは考えていませんでした。 +1 –

関連する問題