• 締切済み

画像の大きさと2次元配列

C++で ビットマップの一つ一つのピクセルの色を取得したいんですが、 画像を読み込んでHBITMAPにしてBITMAPにして、 COLORREF color[bitmap.bmWidth][bitmap.bmHeight]; と宣言するとエラーになってしまいます。 具体的には 『定数式が必要です。』や『サイズが 0 の配列を割り当てまたは宣言しようとしました。』です。

みんなの回答

回答No.3

> 二次元配列が宣言できないということです。 mallocで動的に確保せにゃなりません。

参考URL:
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+33050
hosepens
質問者

お礼

ぜんぜんわかってませんでした。 ありがとうございました。

回答No.2

BITMAPのピクセルの色の取得は、そんなに簡単ではありません。 BITMAPのイメージデータの中身は「ピクセルのフォーマットごとに、データの形式が違う」ので「フォーマットに合わせた取り出し方」が必要になります。 例えば、インデックスカラーフォーマットの256カラーのビットマップでは、イメージデータは1バイト1ピクセルで、値は0~255のインデックス番号になっています。そして、0番のカラーは、0番のパレットカラーを見ないと、実際の色が判りません。 例えば、インデックスカラーフォーマットの16カラーのビットマップでは、イメージデータは1バイトの上位4ビット、下位4ビットの2つで2ピクセルになっていて、値は0~15のインデックス番号になっています。0番のカラーは、0番のパレットカラーを見ないと、実際の色が判りません。 なので、通常、Bitmapのピクセル取得はGetPixcelを使用します(GetPixcelは、ビットマップのフォーマットに合わせ、内部で色々な処理を行うので、とても遅い関数です。しかし、同じ事を自前で行うのは不可能に近いでしょう) http://msdn.microsoft.com/ja-jp/library/system.drawing.bitmap.getpixel(VS.80).aspx ビットマップのピクセルデータは、配列型でどうこうできるような簡単なシロモノではないので、素直にGetPixcelを使用しましょう。

hosepens
質問者

お礼

はい。 そうしたいとおもいます。 ありがとうございました。

回答No.1

で、質問は何ですか?

hosepens
質問者

お礼

質問をしっかりできるようにしたいと思います。

hosepens
質問者

補足

つまり、 二次元配列が宣言できないということです。 だから、解決方法を知りたいと思っています。