- 締切済み
画像の大きさと2次元配列
C++で ビットマップの一つ一つのピクセルの色を取得したいんですが、 画像を読み込んでHBITMAPにしてBITMAPにして、 COLORREF color[bitmap.bmWidth][bitmap.bmHeight]; と宣言するとエラーになってしまいます。 具体的には 『定数式が必要です。』や『サイズが 0 の配列を割り当てまたは宣言しようとしました。』です。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 二次元配列が宣言できないということです。 mallocで動的に確保せにゃなりません。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
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を使用しましょう。
お礼
はい。 そうしたいとおもいます。 ありがとうございました。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
で、質問は何ですか?
お礼
質問をしっかりできるようにしたいと思います。
補足
つまり、 二次元配列が宣言できないということです。 だから、解決方法を知りたいと思っています。
お礼
ぜんぜんわかってませんでした。 ありがとうございました。