ひだっちブログ › MEMO › 2011年11月04日

スポンサーリンク

この広告は一定期間(1ヶ月以上)更新のないブログに表示されます。
ブログ記事の情報が古い場合がありますのでご注意下さい。
(ブログオーナーが新しい記事を投稿すると非表示になります。)
  

Posted by at

2011年11月04日

ビットマップ画像の仕組み

またまた備忘録となりますので、こっそりアップします。
ご興味があれば、どうぞ。

これ何だ?正解は・・・
これ何だ?の種明し
の続きです。

ここから先は、以前の記事もご覧になったほうが
何やってんの?
が伝わるかもしれません。

ビットマップ画像のフォーマット(中身を調べます)

縦8px 横8pxの小さな画像を調べてみます。
画像を読み取り、エクセルのセルで画像を再現します。
今回のプログラムを実行すると、こうなりました。

黄色い枠の中にあるのが、元画像です。(小さい)
プロパティでファイルサイズは248バイトでした。

仕組みを理解するために、画像からバイナリファイルを
1バイトづつエクセルのセルに書き出してみます。

バイナリファイルを分かりやすく、順番に区切ってみました。
画像ファイルの中身です。(画像クリックで拡大)

知りたい情報部分は黄色にしてあります。

上から
1.ヘッダ部分   ファイルサイズなど
2.情報ヘッダ   横幅 高さなど
3・画像データ領域 RGBの画像データ
となっています。
図の画像データ領域には、3バイトごとにRGBの色をつけています。


◆ヘッダ部分(14バイト)
ファイルサイズ
 (248 プロパティと同じになってます)
データオフセット
 (データ領域までのバイト数)

◆情報ヘッダ
 (40バイト)
横幅
 (画像の横幅px)
高さ
 (画像の高さpx)
ビット数
 (1ピクセルのビット数 RGBの3バイト×8)
データサイズ
 (縦8×横8×3バイト=192バイト+2バイト)

◆画像データ領域
 (左下角より右へ、以後1段づつ上がっていく
  カラーはRGBではなく、BGRの順になっている)



注意&補足
※画像は、左下から右上へ記録されているので、
 そのまま読み取ると元画像が上下逆になる。(二つ目の図の通り)

※最後の+2バイトは、ファイル全体のサイズを
 4の整数倍バイトにするための端数で、0が入っている。

※画像横幅も4の整数倍バイトに揃える必要があるらしい。
 この画像の場合、横8×3バイト=24バイトとなり、
 4で割り切れる。

元画像の横幅を4の整数倍でトリミングする理由が、
ここにある。

本来プログラミングの技術で処理する部分を、
画像を4の倍数でトリミングする技術?
で回避しました。



まとめ
ヘッダ    14バイト
情報ヘッダ  40バイト
画像データ  192バイト
       (横8×縦8×RGB3バイト)
端数     2バイト(ファイル全体を4の整数倍にする調整)
合計     248バイト
一応、ファイルサイズとピッタリ計算出来ました。


コンピューターのファイルは、0と1で記録されていることが
今回、なんとなく見えた気がしました。


これは、あくまで備忘録であり、
自分なりの解釈です。
当ブログの内容について責任は負えません。


次回もビットマップ画像について備忘録です
画像を4の倍数で、トリミングしなければならない理由を調べます。

続く
  

Posted by MEMO at 22:10Comments(0)EXCEL劇場