DDSファイル・32ビットARGBのバイト文字列の並び

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

DDSファイルという画像ファイルを扱う機会があったので、そのメモ。
DDSファイルは、4バイト(32ビット)で色情報を表していて、バイトの並びはARGBが、リトルエンディアンで並んでいた。

・ARGB
A:Alpha Channel(アルファチャネル)
R:Red(赤)
G:Green(緑)
B:Blue(青)

Alpha Channel(アルファチャネル)とは、透過度を表す情報で、FFが不透明、00が透明を表す。
リトルエンディアンとは、バイトの並び順が、下位桁→上位桁の順に並ぶ並び方。(の解釈でOK?)
たとえば、通常、数字の「1234」を表す場合、上位桁のほうから”1234”と書きますけど、リトルエンディアン方式の場合、下位桁のほうから”4321”という並びで、数字の「1234」を表記する。

DDSファイルは、最初の128バイトまでが画像のフォーマット情報(画像の高さ、幅などの情報)が入っていて、実際のARGB情報は、129バイト目から開始していました。
Bz秀丸など、バイナリモード(16進法)でファイルを扱えるエディタでファイルを開くと、バイトの生の並びを確認できる。
ちなみに、ほとんどのパソコンでは、1バイト=8ビットで、4ビットが1桁の16進数で表せるので、1バイト(8ビット)は2桁の16進数で表記することが多い。
参考:2進数・8進数・16進数・10進数と変換方法

たとえば、DDSファイルの129バイト目以降の色情報のバイトの並びで・・・

42 19 FB FF 37 14 FC FF 2C 0F FC FF 21 09 FD FF 

というバイトの並びがあった場合、4バイトづつ区切ってリトルエンディアンを考慮して読むと、

FF FB 19 42
FF FC 14 37
FF FC 0F 2C
FF FD 09 21

と、と4バイト×4のARGB情報が格納されていることが分かりました。
アルファチャネルは、すべてFF(不透明)をなっている。
そして、この色を実際にHTML上に表示するため、以下のようなHTMLを書いてみます。

<font color="#FB1942">■■■</font><br>
<font color="#FC1437">■■■</font><br>
<font color="#FC0F2C">■■■</font><br>
<font color="#FD0921">■■■</font><br>

  実際の表示↓

■■■
■■■
■■■
■■■

赤~オレンジっぽい色が表示されることが分かり、実際の画像データと合致していた。
ここまで調べたんですけど、少しだけバイト文字列に強くなれた気がしました。


日時: 2009年04月22日 17:48
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/474

この記事にトラックバックされる方は、参照先が分かるようにするために、「DDSファイル・32ビットARGBのバイト文字列の並び」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - ウェブライフハック