1

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

4

4 に答える 4

4

イメージを Bitmap オブジェクトにフィードしてから getPixel(x, y) メソッドを呼び出して、特定のポイントのピクセルを取得できます。Bitmap オブジェクトにはイメージの寸法があるため、すべてのピクセルを反復処理して (YIKES!)、目的の色との一致をテストできます。getPixel() は、操作できる Color オブジェクトを返します。これが私が超高速で取り組んだものです。pictureBox1 は、フォームの PictureBox 要素です。

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

ただし、一致するピクセルの検索は最悪の場合 O(n) であることに注意してください。ここで、n は画像内のピクセル数です。小さい、または中程度のサイズの画像の場合、これはそれほど悪くはありませんが、巨大な画像の場合、プログラムがハングすることに気付くかもしれません。

于 2012-05-08T02:00:49.683 に答える
3

@kevin628 が言ったことを実行できますが、forステートメントを追加すると、次のようにすべてのピクセルが検索されます。

    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));
            }
        }
    }

次に、この画像を使用すると、次のようなものが得られます(これは〜50000行であるため、これ全体ではありません):

カラー [A=255、R=247、G=240、B=136]
カラー [A=255、R=252、G=247、B=155]
カラー [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=255, R=219, G= 187、B=162]
カラー [A=255、R=126、G=104、B=91]
カラー [A=255、R=108、G=94、B=93]
カラー [A=255、R=241、G=235、 B=239]
カラー [A=255、R=139、G=137、B=142]
カラー [A=255、R=83、G=92、B=101]
カラー [A=255、R=146、 G=172, B=187]
カラー [A=255, R=17, G=62, B=85]
カラー [A=255, R=40, G=106, B=138]
カラー [A=255, R=33, G=116, B=146]
色 [A=255, R=5, 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=11、G=107、B=105]
カラー [A=255、R=46、G=113、 B=106]
カラー [A=255, R=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
    }
}
于 2012-06-16T17:11:19.990 に答える
0

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

于 2012-05-08T02:15:30.170 に答える
0

1) Load up your texture as array of bytes. For example, if your texture is 2x2 size, it should look something like: 000111222333 Where: 000 - RGB at (0,0) 111 - RGB at (1,0) 222 - RGB at (0,1) 333 - RGB at (1,1) 000 or 111 means it has 3 bytes, where each byte is red,or green, or blue. Once you done that, you can loop through all x and y, and check if color at current position matches your searched color.

于 2012-05-08T01:56:45.473 に答える