bmpについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: bmpについて
言語や環境面の説明がないので大雑把にしかお答えできませんが、ファイルをバイナリデータとして読み込み形式を判定して色情報を得ます。
bmpの保存されている形式を判定しないと色情報を取得することはできません。
bmpの保存されている形式を判定しないと色情報を取得することはできません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 15年前
- 住所: 東京
Re: bmpについて
画像の幅、高さが決まっているのであれば、バイナリデータを読み込んだ後ヘッダー部分(先頭54バイト)は捨ててしまって構いません。
あとは、
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
・・・・・・・・・
・・・・・・
・・・
という構造に(大抵は)なっていると思いますので、ご自由にデータを取り出してください。
※R,G,Bは1バイトずつです
あとは、
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
・・・・・・・・・
・・・・・・
・・・
という構造に(大抵は)なっていると思いますので、ご自由にデータを取り出してください。
※R,G,Bは1バイトずつです
Re: bmpについて
[RGB]ではなく、[BGR]だと思います。MoNoQLoREATOR さんが書きました:画像の幅、高さが決まっているのであれば、バイナリデータを読み込んだ後ヘッダー部分(先頭54バイト)は捨ててしまって構いません。
あとは、
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
・・・・・・・・・
・・・・・・
・・・
という構造に(大抵は)なっていると思いますので、ご自由にデータを取り出してください。
※R,G,Bは1バイトずつです
あと、最後の[\0]は必ず1個とは限らず、0~3個で、その行のバイト数が4の倍数になるように埋める役割です。
オフトピック
私が知っているビットマップでは、の話です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: bmpについて
RGB形式なら白黒画像と言わずグレースケール画像と言う気がします。
24ビット/ピクセルのBI_RGB形式では、B,G,Rの順に1バイトずつ並んでいますが、一ラインごとに4バイト境界に揃えられるので、画像の横幅*3とはならない場合があります。
あと一般的には画像の見た目で下のラインから上に向かって格納されますが、これもヘッダ情報の縦サイズが負の数の場合は反転します。
24ビット/ピクセルではない場合やBI_RGB形式ではない場合、ヘッダ部分が54バイトではない可能性がありますし、ピクセルデータの並びが異なる可能性もあります。
#カブった
24ビット/ピクセルのBI_RGB形式では、B,G,Rの順に1バイトずつ並んでいますが、一ラインごとに4バイト境界に揃えられるので、画像の横幅*3とはならない場合があります。
あと一般的には画像の見た目で下のラインから上に向かって格納されますが、これもヘッダ情報の縦サイズが負の数の場合は反転します。
24ビット/ピクセルではない場合やBI_RGB形式ではない場合、ヘッダ部分が54バイトではない可能性がありますし、ピクセルデータの並びが異なる可能性もあります。
#カブった