2011-12-19 6 views
1

私は1D配列を持っています。私は8ビットカラービットマップオブジェクトにデータをコピーしました。そして私はそれを救った。私は16進エディタでビットマップを開き、元の配列データを見つけましたが、驚いたことに、配列データの前に多くの情報がありました。私はこのセクションがヘッダーの権利に属すると思いますか?私はC#が普通のヘッダーよりも大きいビットマップを作成したと思います。

私は、六角ビューenter image description here

+2

C#はあなたのアサーションを拒否し、その指を.Netで指します。 –

+1

はい、これはパレットを含むヘッダーです –

+0

パレットは常にヘッダーのような固定サイズですか? – klijo

答えて

1

OK、のは、ビットマップ形式を見てみましょう:

http://en.wikipedia.org/wiki/BMP_file_format#Bitmap_file_header

これを辿る場合は、まず最初に、あなたが学びますあなたのデータは0x436(1078)バイト離れているということです。

ファイルヘッダーは14バイトです。この場合、情報ヘッダーは次の40バイトの長さです。 1078 - 14 - 40 = 1024。つまり、ヘッダーとデータ自体の間に1Kがあります。この仕様では、次のセクションはカラーテーブルです。色あたり4バイトで、この表は256色を含んでいます。

その後、画像が表示されます。

だから、あなたが見ている膨らみの大部分は.Netがそこに置いているデフォルトの256色の表です。

ヘッダーでは1ピクセルあたり1バイトを使用しています。つまり、ルックアップテーブルの長さは2^8バイトで、256色(1024バイト)である必要があります。

すべてのヘッダーフォーマットでカラーテーブルを完全に埋め込む必要はありませんが、ビットマッププロデューサ(.Net)がカラーテーブルを完全に塗りつぶす理由を簡単に推定できます。少なくとも最初の256色。

+0

私は8ビットカラービットマップを作成しました。だから私は24ビットカラービットマップを作成する場合、どのくらいの大きさは、カラーテーブルですか?まだ1K? – klijo

+1

すべては、ライブラリが何をするかによって異なります。この仕様では、24ビットカラービットマップの場合、ピクセル内で色を完全に定義できるので、カラーテーブルはもはや必要ではないという。実装まではすべてです。彼らはまだ色のテーブルを置くかもしれませんが、使用された色だけで(256色より大きい可能性があります)。彼らは、データの中から色を選択して直接使用することができます。試して見てください。 –

+0

には、カラーテーブルの存在を確認するための自動ツールはありません。 16進数ビューアを使ってそれを探しているのは時間がかかり、エラーが発生しやすくなります – klijo

関連する問題