2012-05-08 16 views
1

私は、色を検出し、その色でそのピクセルのx、y座標を見つけることができるプログラムをVisual Studio C#で作成しています。私は研究をしましたが、私はあなたがすでに座標を与えて、それが色を感知しています、それは私が望むものではなく、私は色を与えたい、そしてそれは座標を見つけることです。誰でもこれを行う方法を知っていますか?ありがとう色のピクセル座標を見つける

+0

どのようにカラーRGBまたは単色のブルーを与えるつもりですか? –

+0

ほとんどの場合、RGBですが、私は実際にこれのためにどのような機能があるのか​​わかりません...それが私が求めているものです。 – Pugmatt

+2

あなたはその情報をどこから見つけるでしょうか?あなたは明らかにすべてのxとyをループして、それらがあなたが求める色であるかどうかをテストする必要があります。 – SimpleVar

答えて

0

1)テクスチャをバイトの配列として読み込みます。 RGBで(0、 - (1,0) 222でRGB - (0,0) 111でRGB - 000::あなたのテクスチャは2x2のサイズであれば、例えば、 は、それは次のようになります1) 333 - RGBで(1,1) 000または111の意味は3バイトです。ここで、各バイトは赤、または緑、または青です です。 これを実行したら、すべてのxとyのループ、 を実行し、現在の位置の色が検索した色と一致するかどうかを確認できます。

3

イメージをBitmapオブジェクトに供給し、getPixel(x、y)メソッドを呼び出して、特定のポイントでピクセルを取得できます。 Bitmapオブジェクトはイメージの大きさを持つため、すべてのピクセル(YIKES!)を繰り返し処理して、目的の色と一致するかどうかをテストできます。 getPixel()は、操作可能なColorオブジェクトを返します。ここで私は超高速に仕事をしています。 pictureBox1は、フォーム上のPictureBox要素です。

Bitmap b = new Bitmap(pictureBox1.Image); 
Color c = b.GetPixel(0,0); 

一致画素の検索は、nは画像内のピクセルの数であり、最悪の場合はO(n)であること、しかし、覚えておいてください。小さな画像や多分中規模の画像ではこれほど悪くはありませんが、巨大な画像の場合は、プログラムがハングアップすることがあります。

+1

パフォーマンスを向上させるには、検索を複数のセグメントに分割し、より小さいセグメントを検索してみます。 – Reddog

0

あなたはすでにこれで見つかった方法を使用することができます。ユーザーが入力した色と同じ色を見つけるために、すべての座標ですべてのピクセルをチェックします。 0、0で始まります。次に、ピクセル値の行の終わりになるまでX値をインクリメントします。 X値が行の最後に来るたびに、Y値をインクリメントしてXを0にリセットします。ユーザーが入力した色の値に等しい色の値を取得すると、最後に使用されたX座標とY座標一致するものを見つける前に、ユーザーに返されたものがあります。

あなたがkevin628は言ったが、それはこのようなすべてのピクセルを検索しますので、 for文を追加し、@何ができる
3

private void GetPixels() 
    { 
     Bitmap b = new Bitmap(pictureBox1.Image); 

     List<Color> colorList = new List<Color> 
     { 

     }; 

     for (int y = 0; y < b.Height; y++) 
     { 
      for (int x = 0; x < b.Width; x++) 
      { 
       colorList.Add(b.GetPixel(x, y)); 
      } 
     } 
    } 

その後this imageを使用して、あなたはそれとして、このような何か(全体ではなく、これを取得します

カラー[A = 255、R = 247、G = 240、B = 136]
カラー[A = 255、R = 252、G = 247、B = 155]〜50000行)であります
[A = 255、R = 242、G = 238、B = 164] カラー[A = 255、R = 79、G = 124、B = 103]
カラー[A = 255、R = 79、G = 124、B = 103]
カラー[A = 255、R = 0 、G = 42、B = 17]
カラー[A = 255、R = 16、G = 104、B = 90]
カラー[A = 255、R = 15、G = 114、B = 109] カラー[A = 255、R = 33、G = 125、B = 124]
カラー[A = 255、R = 11、G = 83、B = 80]
カラー[A = 255、R = 36 G = 72、B = 68]
カラー[A = 255、R = 151、G = 156、B = 150]
カラー[A = 255、R = 90、G = 70、B = 59]
カラー[A = 255、R = 147、G = 109 、Bは= 88]
カラー[A = 255、R = 252、G = 204、B = 164]
カラー[A = 255、R = 220、G = 175、B = 134]
カラー[A G = 104、B = 91]
カラー[A = 255、R = 108、G = 94、R = 185、R = 179、G = 187、B = 162] B = 93]
[A = 255、R = 241、G = 235、B = 239]
カラー[A = 255、R = 139、G = 137、B = 142]
カラー[A G = 172、B = 187]
カラー[A = 255、R = 17、G = 62、A = 255、R = 、B = 85]
色=〔A = 255、R = 33、G = 116、B = 146〕
〔A = 255、R = 5〕色[A = 255、R = 40、G = 106、B = 138] [A = G = 96、B = 117]
カラー[A = 255、R = 0、G = 79、B = 84]
カラー[A = 255、R = 6、G = 94、B = 80] カラー[A = 255、R = 27、G = 114、B = 98]
カラー[A = 255、R = 40、G = 130、B = 131]
カラー[A = 255、R = 19 G = 116、B = 125]
カラー[A = 255、R = 21、G = 128、B = 134]
カラー[A = 255、R = 5、G = 119、B = 120] カラー[A = 255、R = 8、G = 120、B = 121][A = 255、R = 46、G = 113、B = 106]
[A = 255、R = 11、G = 107、B = 105] 21、Gが= 70、B = 49]
カラー[A = 255、R = 45、G = 123、B = 99]

そして

色をテストするだけような何か:

for (int i = 0; i < colorList.Count; i++) 
{ 
    Color c = Color.Black; 

    if (c == colorList[i]) 
    { 
     //do something 
    } 
} 
関連する問題