bmpについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tes

bmpについて

#1

投稿記事 by tes » 13年前

bmp(白黒画像、640*480)の色情報を取得するにはどの様にすればいいでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: bmpについて

#2

投稿記事 by softya(ソフト屋) » 13年前

言語や環境面の説明がないので大雑把にしかお答えできませんが、ファイルをバイナリデータとして読み込み形式を判定して色情報を得ます。
bmpの保存されている形式を判定しないと色情報を取得することはできません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 15年前
住所: 東京

Re: bmpについて

#3

投稿記事 by MoNoQLoREATOR » 13年前

画像の幅、高さが決まっているのであれば、バイナリデータを読み込んだ後ヘッダー部分(先頭54バイト)は捨ててしまって構いません。
あとは、
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
・・・・・・・・・
・・・・・・
・・・
という構造に(大抵は)なっていると思いますので、ご自由にデータを取り出してください。
※R,G,Bは1バイトずつです

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: bmpについて

#4

投稿記事 by みけCAT » 13年前

MoNoQLoREATOR さんが書きました:画像の幅、高さが決まっているのであれば、バイナリデータを読み込んだ後ヘッダー部分(先頭54バイト)は捨ててしまって構いません。
あとは、
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
[RGB][RGB][RGB]・・・[\0]
・・・・・・・・・
・・・・・・
・・・
という構造に(大抵は)なっていると思いますので、ご自由にデータを取り出してください。
※R,G,Bは1バイトずつです
[RGB]ではなく、[BGR]だと思います。
あと、最後の[\0]は必ず1個とは限らず、0~3個で、その行のバイト数が4の倍数になるように埋める役割です。
オフトピック
私が知っているビットマップでは、の話です。
そして、「白黒画像」というのは「モノクロビットマップ」のことかもしれません。あくまで推測ですが。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: bmpについて

#5

投稿記事 by ISLe » 13年前

RGB形式なら白黒画像と言わずグレースケール画像と言う気がします。

24ビット/ピクセルのBI_RGB形式では、B,G,Rの順に1バイトずつ並んでいますが、一ラインごとに4バイト境界に揃えられるので、画像の横幅*3とはならない場合があります。
あと一般的には画像の見た目で下のラインから上に向かって格納されますが、これもヘッダ情報の縦サイズが負の数の場合は反転します。

24ビット/ピクセルではない場合やBI_RGB形式ではない場合、ヘッダ部分が54バイトではない可能性がありますし、ピクセルデータの並びが異なる可能性もあります。

#カブった

閉鎖

“C言語何でも質問掲示板” へ戻る