DDSファイル・32ビットARGBのバイト文字列の並び
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
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>
実際の表示↓
■■■ ■■■ ■■■ ■■■
赤~オレンジっぽい色が表示されることが分かり、実際の画像データと合致していた。
ここまで調べたんですけど、少しだけバイト文字列に強くなれた気がしました。