Java如何实现屏幕指定4×4区域内特定颜色/RGB值检测?
实现方案
你只需要在单像素检测的基础上,增加指定矩形区域的像素遍历逻辑即可,还可以通过步长采样优化检测速度,避免全像素遍历耗时过高。
步骤说明
- 先定义待检测区域的参数:区域左上角坐标
startX、startY,区域宽度areaWidth、区域高度areaHeight,可根据你实际的屏幕顶部中间区域尺寸调整 - 可配置采样步长:如果待检测的圆形尺寸较大,不需要逐像素检测,设置步长为2~5即可大幅提升检测效率,不会漏检
- 遍历区域内像素时只要检测到符合阈值的红色像素,立刻终止遍历并打印提示,减少不必要的性能消耗
完整可运行代码
import java.awt.AWTException; import java.awt.Color; import java.awt.Robot; public class AreaColorDetector { public static void main(String[] args) throws AWTException { Robot robot = new Robot(); // 待检测区域参数,示例为1920*1080屏幕顶部中间600*100的矩形区域,可自行修改 int startX = 660; int startY = 0; int areaWidth = 600; int areaHeight = 100; // 采样步长,数值越大检测越快,圆形越小步长要越小 int step = 2; while (true) { // 循环检测,不需要持续检测可以去掉循环 boolean foundRed = false; // 遍历检测区域内的像素 for (int x = startX; x < startX + areaWidth; x += step) { for (int y = startY; y < startY + areaHeight; y += step) { Color color = robot.getPixelColor(x, y); int red = color.getRed(); int green = color.getGreen(); int blue = color.getBlue(); // 你的红色检测阈值 if (red > 230 && green < 100 && blue < 100) { foundRed = true; break; } } if (foundRed) break; } if (foundRed) { System.out.println("Found red color!"); // 检测到后可以加延迟,避免重复打印,不需要可以删除 robot.delay(1000); } // 每次检测的间隔,根据响应速度需求调整,单位毫秒 robot.delay(50); } } }
注意事项
- 如果检测区域很大,可以把步长调大,避免检测延迟过高
- 红色阈值可以根据你实际的颜色深浅调整,避免误判或漏判
- 代码默认开启循环持续检测,不需要的话删除外层while循环即可
内容的提问来源于stack exchange,提问作者Golden
相关产品推荐
相关产品推荐

