私はコードを持っています。それは画像(または画面のセクション)の色を見つけ、RGとBの色が127より大きい場合、2D int配列の対応する位置に1を置きます。これが現在のセグメントですが、明らかに非常に遅いです。これを行うより良い方法はありますか?
private void traceImage(){
try{
Robot r = new Robot();
b = new int[470][338];
for(int y = 597; y < 597+469; y++)
{
for(int x = 570; x < 570+337; x++)
{
if(r.getPixelColor(x,y).getRed() > 127 &&
r.getPixelColor(x,y).getGreen() > 127 &&
r.getPixelColor(x,y).getBlue() > 127)
{
b[y-597][x-570] = 1;
}
else
{
b[y-597][x-570] = 0;
}
}
}
}
catch(Exception ex){System.out.println(ex.toString());}
}
上記の値を使用してこれを行うには、より高速な方法が必要です。b
は int 配列で、このセグメントで初期化されます。r
画面上のピクセルの色を見つけるために使用するロボットです。自明x
である必要があります。y
ありがとうミケラ!これは私があなたの答えに基づいて得た最終結果です:
private void traceActionPerformed(java.awt.event.ActionEvent evt) {
try{
Robot r = new Robot();
BufferedImage image = r.createScreenCapture(new Rectangle(597,570,470,337));
b = new int[image.getWidth()][image.getHeight()];
for(int y=0;y<image.getWidth();y++){
for(int x=0;x<image.getHeight();x++){
if(image.getRGB(y,x)==-1){
b[y][x]=0;
}
else{
b[y][x]=1;
}
}
}
System.out.println("Done");
}
catch(Exception ex){System.out.println(ex.toString());}
}
if else ステートメントの -1 は、私が望んでいたように黒いピクセルの値を見つけたようです。