プロが教える店舗&オフィスのセキュリティ対策術

Visual C++ 2005のC++/CLI対応で、.NET Frameworkのクラスライブラリを使用し、画像処理のプログラムを作成しています。
pictureBox1->Image = gcnew Bitmap( ファイル名 );
で、画像を表示するところまではできたのですが、表示したBitmapデータのRGBカラー情報を取得する方法がわからず、困っています。
ご存知の方、教えてください。
また、このような情報が載っている書籍やサイトがありましたら、合わせて教えてください。
よろしくお願いします。
必要な情報が抜けていましたら、お手数ですが、ご指摘お願いします。

A 回答 (3件)

最初に訂正ですが、 ToArgv() メソッドのことは忘れてください。


RGB情報を取得したいとは、R,G,B それぞれの値を取得したいということですよね?
Color 構造体に、R,G,B というそのまんまの読取専用のプロパティがありました。

手順は
(1) Bitmap からColorオブジェクトを取得
(2) Color 構造体のR,G,B というプロパティにアクセス。
という感じです。

class Bitmap{
public:
Color GetPixel(X, Y);
};

struct Color{
int R, G, B;
int ToArgv(); // このメソッドは無視する
}; // C++ は構造体の中にもメソッドを書ける

というクラスと構造体があって、
Bitmap::GetPixel(X, Y) でColorオブジェクトが取得できます。
Bitmap bmp = new Bitmap() ; // 仮想コード
Color color = bmp.GetPixel(X, Y);

となります。
次に、取得したColor構造体のオブジェクトcolor を利用して、それぞれのRGB値を取得します。

unsigned red = color.R;
unsigned green = color.G;
unsigned blue = color.B;

以下、bmp.bmp というビットマップの全Pixel のRGBを result.txt というファイルに書き込むサンプルです。(CLR コンソールアプリ )

// メイン プロジェクト ファイルです。

#include "stdafx.h"

#using <System.Drawing.dll>
using namespace System;
using namespace System::IO;
using namespace System::Drawing;

int main(array<System::String ^> ^args){
StreamWriter^ sr = File::CreateText ("result.txt");
Bitmap^ bmp = gcnew Bitmap("bmp.bmp");

for (int i = 0; i < bmp->Width; i++){
for (int j = 0; j < bmp->Height; j++){
Color col = bmp->GetPixel(i,j);
unsigned int red = col.R;
unsigned int grn = col.G;
unsigned int ble = col.B;

sr->WriteLine("( {0}, {1} ) - R : {2}, G : {3}, B : {4}", i,j,red,grn,ble);
}
}

sr->Close();

return 0;
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
最初に、質問文がわかりずらくてすみません。
ご察しの通り「R,G,B それぞれの値を取得したい」ということでした。

Color構造体を経由する分(?)、取得するまでに多少時間がかかってしまいますが、この方法でプログラムの情報取得部分が完成しました!
よくよく見れば、ヘルプに載っているんですね。
自分のしたい処理をヘルプで探すのは難しくて…。
既存のプログラムの処理内容を調べることはできるのですが…。
今後、ファイルへの出力も考えていましたので、参考にさせていただきますね。
丁寧な解説、ありがとうございました。

追加質問なのですが、回答者様はヘルプ等を読んで勉強されているのですか?
今後もわからないところが出てきそうなので、ヘルプだけでは心もとなく、何か参考にするものが欲しいのですが、書籍やHPはご存知ありませんか?
お時間がありましたら、よろしくお願いします。

お礼日時:2006/06/02 12:12

No1 の参考URL はエラーになるようなので、



ttp://msdn2.microsoft.com/ja-jp/library/system.drawing.color.toargb.aspx

を参考にしてください。
これでも駄目なら、 Color 構造体 の
ToArgb () メソッド を確認してください。
そこにサンプルがあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
ToArgb()メソッドを使うと、Color構造体としてRGB情報を取得できるということですよね?
Color構造体を直接操作することはできなさそうなので、そのColor構造体をRGBに変更したいのですが、その方法はご存じないでしょうか。
R,G,Bそれぞれの情報を変更して画像処理をしたいので。
ご存知でしたら、よろしくお願いします。

お礼日時:2006/05/31 20:35

Bitmap クラスの GetPixel(X,Y) で、Color オブジェクトを取得します。


取得したオブジェクトに対し、Color構造体の ToArgb() を実行すると、4バイト値が取得できます。
この値は、2バイト目から4バイトまでのそれぞれが、赤、緑、青のカラーコンポーネントだそうです。
参考URLに、サンプルが載ってます。
詳しく見てないですが、「一部の既知の色とその名前、およびそれぞれの 4 つのコンポーネントの値を示します」 と謳っています。

参考URL:http://msdn.microsoft.com/library/ja/default.asp …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!