ファイルの有効なサイズを取得しようとしていBMP
ます。
もちろん、最良の方法はLength
、ロードされたストリームのプロパティを取得することです。
しかし、BMP
ヘッダー形式にはそのサイズに関する情報が含まれているので、BMPヘッダーから正確に取得したいと思います。
Wikiまたは他のソースから:
http://en.wikipedia.org/wiki/BMP_file_format
offset: 0002h | 4 bytes | the size of the BMP file in bytes
したがって、サイズ値はBMP
4バイト(から[2] -> [5]: 2, 3, 4, 5
)の領域のヘッダーに含まれます
したがって、まず最初に、すべてのバイト値を取得してすべてを合計することを考えました。
1)。
int BMPGetFileSize(ref byte[] headerPart)
{
int fileSize = 0;
for (int i = 0; i < headerPart.Length; i++)
{
fileSize += headerPart[i];
}
return (fileSize > 0) ? fileSize : -1;
}
サイズが非常に小さいです...私のファイルの場合、実際のサイズは901です。
しかし、私はコードから得ました:84。
正しい領域を確認しましたが、正しい値を取得できないと思いましたが、正しく取得しました(BMPのbyte []データから2番目から5番目まで)。
2)。次に、それらを合計するのではなく、すべての値を1つの文字列行に書き込んでから、System.Int32に変換し、1024で除算してサイズをキロバイト単位で取得するだけだと思いましたが、そうではありません。値に等しい901 Kb
。
ダイアログを見て関数コードと比較すると、領域を混乱させて間違った値を選択したと思うかもしれませんがwatch
、関数からのbyte []配列は:headerPart
、ではないdata
ので、私はしませんでした何でも混乱させます、data[]はBMPファイル全体のファイルストリームです。
では、C#のストリームのプロパティからではなく、BMPヘッダーからファイルサイズを取得するにはどうすればよいですか?