2016-07-23 2 views
0

オンラインで入手できるbmpファイルの違いを見つけることができなかったため、24ビットか32ビットかを簡単に分かりました。32ビットと24ビットのbmpファイルを区別する方法は?また、どのように私は32ビットbmpファイルをC++配列に読み込むのですか?

私は32ビットbmpファイルをC++を使ってrgb配列に読み込む必要があり、ほとんどのチュートリアルは32ビットしか存在しません。

+0

[BITMAPINFOHEADER](* https://msdn.microsoft.com/en-us/library/windows/desktop/dd318229.aspx)構造体の* biBitCount *メンバーは、1ピクセルあたりのビット数を宣言します。ビットマップファイルを読み込む必要がある場合は、ライブラリを使用します。 Windows上では[Windows Imaging Component](https://msdn.microsoft.com/en-us/library/windows/desktop/ee719902.aspx)になります。あなた自身を転がしてはいけません。 BMPファイル形式は** way ** too complexです。 – IInspectable

+0

@IInspectable私の主な仕事はrgb値であるので、ヘッダーやその他のガベージデータを扱うための独自の構造を作成する方法はありませんか? WICの使用は、率直に言って、簡単ではないほど複雑です。 – Anurag

+0

@Anuragあなたは窓を使って開発していますか?WICを学ぶよりも短い方法を望みますか?または、クロスプラットフォームで作業しているために尋ねますか? – Christophe

答えて

0

ビットマップファイルの形式はhere on MSDNと記載されています。ファイルのヘッダーは14バイトで始まり、bitmap info headerが続き、見つかった情報はbiBitCountです。

編集:コメントでiinspectableで述べたように

、ビットマップ形式が複雑になることがあります。したがって、Windowsでは、Windows APIを使用して上記の構造の情報にアクセスするのが最善です。

あなたは、クロスプラットフォームで作業している場合、あなたは多くの詳細の世話を自分で取る必要があります:

  • 異なるfile format versions:実際にはあなたが(符号なし32ビット)DWORDを読む必要がオフセットでファイルのうち14が見つかったらwhich version of the data structureが使用されます。探している情報は、ファイルのオフセット24(コアバージョン)または28(その他のバージョン)です。それはWORDなので、16ビットの符号なしです。

  • ファイル形式を圧縮できました。これは、コアバージョンの場合ではありません。他のバージョンでは、次のように表示されますDWORD(オフセット30)。

  • すべての整数はリトルエンディアンで格納されます。

しかし、このすべてを自分で行うのではなく、CImgまたは別のライブラリを検討することもできます。

+0

あなたは間違っています。 [BITMAPFILEHEADER](https://msdn.microsoft。com/ja-us/library/dd183374.aspx)の後には[BITMAPCOREINFO](https://msdn.microsoft.com/en-us/library/dd183373.aspx)が続きます。その場合、* bcBitCount *のオフセットは24になります。私が言ったように、自分自身をロールバックしないでください。 BMPは**根本的に**複雑です。 – IInspectable

+0

@IInspectableこれを指摘してくれてありがとう。私はそれに応じて編集しました。 – Christophe