gpt4 book ai didi

java - 在缓冲图像中查找具有容差的颜色

转载 作者:行者123 更新时间:2023-11-30 03:49:53 25 4
gpt4 key购买 nike

我正在编写一个方法,尝试在 bufferedImage 中查找颜色。目前,该方法的工作原理是拍摄屏幕截图,然后扫描图像以获取特定颜色。现在我想添加一些 RGB 容差,因此如果用户尝试查找容差为 1 的颜色 (1, 3, 5),任何颜色 +-1 R、B 或 G 都将返回 true。

我可以通过首先生成有效的 RGB 值的 arrayList 来解决这个问题,然后对于每个像素,我可以遍历该数组并检查每个值。问题是对于大图像的高容差可能会变得非常慢。

是否有更有效或可能内置的方式可以做到这一点?这是我现在的方法。谢谢!

public static Point findColor(Box searchArea, int color){
System.out.println("Test");
BufferedImage image = generateScreenCap(searchArea);
for (int i = 0; i < image.getWidth(); i++) {
for (int j = 0; j < image.getHeight(); j++) {
if((image.getRGB(i, j)*-1)==color){
return new Point(i + searchArea.x1, j + searchArea.y1);
}
}
}
return new Point(-1, -1);
}

编辑:我使用 int RGB 值进行所有比较,因此我使用 Color.getRGB() 代替 Color[1, 1, 1],它返回一个负整数,为了简化最终用户,我将其转换为正整数.

最佳答案

如果您想要自定义容差,则需要比较 RGB 值而不是“整体”颜色。这是代码,尚未经过测试,但您明白了:

public static Point findColor(Box searchArea, int r, int g, int b, int tolerance) {
// Pre-calc RGB "tolerance" values out of the loop (min is 0 and max is 255)
int minR = Math.max(r - tolerance, 0);
int minG = Math.max(g - tolerance, 0);
int minB = Math.max(b - tolerance, 0);
int maxR = Math.min(r + tolerance, 255);
int maxG = Math.min(g + tolerance, 255);
int maxB = Math.min(b + tolerance, 255);

BufferedImage image = generateScreenCap(searchArea);
for (int i = 0; i < image.getWidth(); i++) {
for (int j = 0; j < image.getHeight(); j++) {
// get single RGB pixel
int color = image.getRGB(i, j);

// get individual RGB values of that pixel
// (could use Java's Color class but this is probably a little faster)
int red = (color >> 16) & 0x000000FF;
int green = (color >> 8) & 0x000000FF;
int blue = (color) & 0x000000FF;

if ( (red >= minR && red <= maxR) &&
(green >= minG && green <= maxG) &&
(blue >= minB && blue <= maxB) )
return new Point(i + searchArea.x1, j + searchArea.y1);
}
}
return new Point(-1, -1);
}

关于java - 在缓冲图像中查找具有容差的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com