画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

04 | 2017/05 | 06
S M T W T F S
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

ビットマップファイルフォーマット

目次ページへ

ビットマップファイル(*.bmp)のファイルフォーマットです。

ビットマップ全体の構造

BITMAPFILEHEADER14Byte
BITMAPINFOHEADER40Byte
カラーテーブル(無い場合もあり)4Byte*Index数 
画像データ

BITMAPFILEHEADER
typedef struct tagBITMAPFILEHEADER {
  WORD     bfType;
  DWORD   bfSize;
  WORD     bfReserved1;
  WORD     bfReserved2;
  DWORD   bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

bfTypeファイルタイプ'BM'
bfSizeファイル全体のサイズ(バイト数)
bfReserved1予約領域常に0
bfReserved2予約領域常に0
bfOffBitsファイル先頭から画像データまでのオフセット数(バイト単位)

BITMAPINFO

typedef struct tagBITMAPINFO {
  BITMAPINFOHEADER  bmiHeader;
  RGBQUAD                   bmiColors[1];
} BITMAPINFO, *PBITMAPINFO;

BITMAPINFOHEADER

typedef struct tagBITMAPINFOHEADER{
  DWORD  biSize;
  LONG     biWidth;
  LONG     biHeight;
  WORD    biPlanes;
  WORD    biBitCount;
  DWORD  biCompression;
  DWORD  biSizeImage;
  LONG     biXPelsPerMeter;
  LONG     biYPelsPerMeter;
  DWORD  biClrUsed;
  DWORD  biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER; 

biSize構造体のサイズ40
biWidth画像の幅(ピクセル数)
biHeight画像の高さ(ピクセル数)
値が負の場合、画像の上下が逆になる
biPlanesプレーン数常に1
biBitCount1画素あたりのビット数

1
4
8
16
24
32

biCompression 圧縮形式BI_RGB
BI_RLE8
BI_RLE4
BI_BITFIELDS
BI_JPEG
BI_PNG
biSizeImage画像データのサイズ(バイト数)

 BI_RGBの場合
0でも可

biXPelsPerMeter 水平方向の1Mあたりの画素数 0でも可
biYPelsPerMeter 垂直方向の1Mあたりの画素数 0でも可
biClrUsed

 カラーテーブルの色数

 0でも可
biClrImportant 表示に必要なカラーテーブルの色数 0でも可


カラーテーブル
typedef struct tagRGBQUAD {
  BYTE    rgbBlue;
  BYTE    rgbGreen;
  BYTE    rgbRed;
  BYTE    rgbReserved;
} RGBQUAD;

rgbBlue青の輝度値0~255
rgbGreen緑の輝度値0~255
rgbRed赤の輝度値0~255
rgbReserved予約領域 常に0

biBitCountが1,4,8のとき、RGBQUAD構造体のカラーテーブルが指定されます。
biBitCountが24,32のときは存在しません。
ただし、biCompressionがBI_BITFIELDS かつ、biBitCountが16,32の場合、
多ビット(10Bit,12Bitなど)が表示可能となり、ビットフィールドが指定されます。
(ビットフィールドについては多ビット(10Bit、12Bit)画像データの表示、フォーマット
説明しています。)

画像データ
モノクロ画像の場合、輝度値が格納されています。
24Bitカラーの場合、B,G,R,B,G,R・・・の順で各輝度値が格納されています。
32Bitカラーの場合、B,G,R,A,B,G,R,A・・・の順で各輝度値が格納されています。

画像データは、画像の左から右、下から上へ向かう順番で格納されます。
画像データ

また、1行あたりのメモリのサイズは4の倍数バイトになるように調整されています。
この値は以下のようにして計算しています。
VBの場合
  ((biWidth * biBitCount + 31) \ 32) * 4
Cの場合
  ((biWidth * biBitCount + 31) / 32) * 4

4の倍数バイト(32ビットの倍数)になるように調整しています。

ビットマップファイルを開く場合の注意点について

ビットマップファイルを開く場合、ヘッダ情報をもとに画像データ格納用のメモリを確保し、
そのメモリにデータを格納しますが、ヘッダの値はすべて正しく記載されているとは限りません。私の場合、以下の値を信じてメモリの確保などを行っています。

biWidth, biHeight, biBitCountを用いて画像データ格納用メモリの確保
biOffBitsを用いて、画像データまでのファイルのシークを行う。

biSizebiSizeImageなどは信じない方が良いと思います。

 


Loading...
スポンサーリンク

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/44-eb7d148c
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計