0

以下に貼り付けた私の現在のコードは、明らかに、同じ RGB 値を持つ色が見つかるまで、ピクセル (x, y) の色のみを取得し1,1、 一致する色が見つからない場合はピクセルで停止します。これを行うためのより良い方法は何ですか?ピクセル座標の色を取得するだけではありません。?2, 23,3targetColor1000,10001,12,2

getPixelColor(x, y)そして、色の座標が必要なため、メソッドを使用する必要があるため、色の場所をクリックできます。

import java.awt.Color;
import java.awt.Robot;

public class Colour
{
    int    x, y;
    int    n    = 0;
    int    m    = 0;
    int    i    = 0;

    public Colour()
    {
        try
        {
            Robot robot = new Robot();
            Color targetColor = new Color(255, 25, 255);
            Color color = robot.getPixelColor(n, n);

            while (color.getRGB() != targetColor.getRGB() && i != 1000)
            {
                color = robot.getPixelColor(n, n);
                System.out.println("color = " + color);
                n++;
                i++;

                if (color.getRGB() == targetColor.getRGB())
                {
                    i = 1000;
                    System.out.println("colour found" + n + " " + n);
                }
            }
        }
        catch (Exception e)
        {
        }
    }

    public static void main(String[] args)
    {
        Colour color = new Colour();
    }
}

私が尋ねた内容が明確でない場合は、ただ言ってください。より深く、またはより理解しやすい方法で説明しようとします。

4

2 に答える 2

0

(0,0)から(1000,1000)までのすべてのピクセルにアクセスするには、次を使用してみてください。

for(int i=0;i<=1000;i++){
    for(int j=0;j<=1000;j++){
        color = robot.getPixelColor(i, j);
        System.out.println("color = " + color);

        if(color.getRGB() == targetColor.getRGB()){
            System.out.println("colour found" + i + " " + j);
            i=1000;
            break;
        }
    }
}

whileループをこれに置き換えれば、問題はないはずです。

于 2012-07-31T10:03:23.460 に答える
0

Robot.createScreenCapture(Rectangle screenRect)を使用して、より広い領域を一度にキャプチャする必要があります。

これにより、が返されるBufferedImageため、通常の手法のいずれかを使用して、BufferedImageの特定のピクセルを分析できます。BufferedImageは基本的に画像のメモリ内表現であり、コードを介して調べたり操作したりするのに便利な形式です。

一度に多くの処理を行う場合は、BufferedImageをARGB値のint[]配列に変換するのが理にかなっています。

于 2012-07-31T09:15:32.037 に答える