2007年4月10日

5:5:5 or 5:6:5 ?

bmpでの話。

16bitカラーの場合、どっちかなんだけどこれがどっちなのか?
ってどこみるとわかるんだろ??ヘッダの情報の中にそういうのあったかなあ・・・。

16bitカラーを確認したいんだけど、Windowsでそういうツール、、、自分で作るしか?

RGB555とRGB565ですが。

コメントで寝ぼけたことを言ってますね、自分。
確かに5bitが6bitになる事自体はたいした問題ではないと思うんですけど、

よく考えたら、RGB555の場合は、
上位1bitを使わないでR:G:Bを表現してて、それが5:5:5なわけで。
仮に、RGB555のデータをそのままRGB565として使用したら、、、
んー、明らかにGの色がおかしくなりそうです。
ていうか、実際におかしかったです・・・orz

非圧縮 RGB ビデオ サブタイプ

RGB555で検索(笑)したら、↓のようなソフトが。こういうの買ってくれると、きっと楽になるんだろうなあ・・・
組込機器開発用ビットマップ画像最適化ツールとしてのiMageStudio

コメント(4)

MSDN(DirectX)によると…

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/bitmapinfoheaderstructure.asp

「16 bpp ビットマップで biCompression が BI_RGB と等しい場合、フォーマットは RGB 555 である。biCompression が BI_BITFIELDS と等しい場合、フォーマットは RGB 555 または RGB 565 である。AM_MEDIA_TYPE 構造体のサブタイプ GUID を使って特定の RGB タイプを調べる。」


とあります。

つまり、ファイル自体には555か565かの指定は無くて
どちらになるかはグラフィックボードに依存するのではないかと。

で、それを調べるにはDirectXのAPIを使えばわかるっぽいですね。(この辺は詳しくない…^^;)

りきぞ~さん、情報ども!
(いつもすまないねぇ・・・ごほごほ、なんちゃってw)

なるほどね、そういうもんなんですね。
まあ確かに、6ビットが5ビットになっても
人の目にはあまり関係なさそうだよねぇw

そうするとあれだなあ、あとはBigとLittleの関係か。
ありがとうございます^^


<DirectXのAPI
API、うん。
APIはいいねぇ・・・人の生み出した文化の極みだよ(違

私も寝ぼけたこと書いてるような気がしてきました^^;
BMPファイルフォーマットとWindowsの表示モードを混同している・・・orz

さらににグラボがRGB555か565を調べるためにDirectXが必要、と書きましたが、
DescribePixelFormat
というAPIで普通に取得できるみたいです。
誤情報申し訳ない。m(_ _)m


ちなみにGが6ビットなのは、人間の目が緑に対して一番シビアに知覚できるからだとか。

>iMageStudio
リンク先の

「一般のグラフィックスツールで作成した画像データを組込機器のGUI画面で使用すると表示品質が低くなるという問題があります 」

とはどういう意味なんだろう…。

勝手に今回のまとめ(?)

BITMAPINFOHEADER構造体の
biBitCountメンバが16bppのとき、
biCompressionメンバがBI_RGBの場合はRGB555であり、
biCompressionメンバがBI_BITFIELDSの場合は
RGB555かRGB565のいずれかである。
ただ、いずれかと言われても、
RGBのビット位置が不明では正しいカラー情報を得られないので、
カラーマスク値を使って(ANDして)RGB値を取得する。
で、そのカラーマスクはどこにあるかと言うと、
カラーテーブルの先頭3つがカラーマスクになっている。
(赤・緑・青の順で)


…と、16bppのBMPファイルについてはそんなとこでしょうか。
実際に検証したわけじゃないので、真偽のほどは定かでは無いですが…。

BMPファイルってありふれてるんですけど、
調べてみると意外とややこしいんですよね(^^;

コメントする