我有一段代码,它的作用是找到图像(或屏幕部分)的颜色,如果 RG 和 B 颜色大于 127,它会将 1 放在 2D int 数组的相应位置。这是我现在拥有的部分,但它显然非常慢。有一个更好的方法吗?
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 显然找到了我想要的黑色像素的值。