2011-12-18 7 views
0

実際には、作成されたビットマップのファイルサイズが入力ビットマップより大きくなっています。私は作成されたビットマップを開き、私が入力したものとはまったく異なって見えました。何故ですか ?保存されたビットマップが読み込まれたビットマップより大きいC#

FileStreamでビットマップを読み込んだ後、その内容をビットマップオブジェクトに書き込みます。次に、ビットマップファイルとしてハードディスクに書き込みます。なぜ出力ビットマップが入力ビットマップよりも大きいのか分かりません。誰かが私を助けてくれますか?

+0

正しく復元されますか? –

+0

nope。私の質問を更新しました – crowso

+2

私は、デフォルトでは、C#はpngに変換されると思います。私は間違っている可能性があります – Jimmy

答えて

2

Bitmap.Save (Image.Save)は、デフォルトでPNG形式で画像を保存します。

Save with an ImageFormat valueに電話する場合は、ビットマップを取得する必要があります。ビットマップファイルが作成されると

b.Save("test.bmp", ImageFormat.Bmp); 
+0

こんにちは。ビットマップをFileStreamとして読み込んだ後、ビットマップオブジェクトを作成し、ビットマップオブジェクトに読み込んだファイルを書き込みます。次に、ビットマップオブジェクトをビットマップファイルとして保存します。このプロセスでは、私が読み込んだファイルは、書き込まれたファイルと同じではありません。 – crowso

+0

さて、bmp形式はかなり単純ですが、オプションの情報ヘッダーのようなものは変更される可能性があります。 – Nyerguds

1

が、多くの場合、各行は4バイトの倍数であることを保証するために、各行に追加のパディングされます。ビットマップファイルをFileStreamに読み込むと、パディングも読み取られます。

これは、FileStreamが予想よりも大きいことを意味する可能性があります。ビットマップに書き込むと、新しいビットマップに書き込むときにパディングがイメージデータであるかのように扱われるため予期しない動作が発生します。

0

申し訳ありません申し訳ありませんあなたの問題をよく理解していませんでした。しかし、このようにしてみましたか?

private System.Drawing.Bitmap readfromFile(string filename) 
    { 
     FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); 
     byte[] bytes = new byte[fs.Length]; 
     fs.Read(bytes, 0, Convert.ToInt32(fs.Length)); 
     MemoryStream ms = new MemoryStream(bytes); 
     System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms); 
     return bmp; 
    } 

と、次のように保存された:

System.Drawing.Bitmap bmp = readfromFile("xxxx --- Path"); 
       bmp.Save("test.bmp", ImageFormat.Bmp); 

私はそれを試してみましたが、それは常に私のために同じ画像を返します。

関連する問題