如何从屏幕指定RGB像素中随机选取?ArrayList存坐标方案咨询
解决方案:收集所有匹配像素后随机选取
你提出的思路完全可行——先把所有符合目标RGB值的像素坐标存入集合,再随机选取其中一个,这样就能彻底解决原方案因扫描顺序导致的随机性不足问题。具体实现步骤如下:
- 初始化一个集合存储匹配坐标:用Java自带的
ArrayList<Point>即可,Point类可以直接存储x、y坐标。 - 遍历屏幕像素时,每找到一个符合RGB条件的像素,就将其坐标添加到集合中。
- 遍历完成后,若集合不为空,通过随机索引从集合中选取一个坐标;若为空则处理未找到目标的情况。
以下是修改后的完整代码示例:
// 遍历前初始化集合与随机数生成器(随机数实例只需创建一次) List<Point> targetPixels = new ArrayList<>(); Random random = new Random(); // 获取屏幕宽高(替换为你实际的屏幕尺寸逻辑) int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width; int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; // 遍历屏幕所有像素 for (int x = 0; x < screenWidth; x++) { for (int y = 0; y < screenHeight; y++) { // 获取当前像素的颜色及RGB值(替换为你实际的颜色获取逻辑) Color color = new Robot().getPixelColor(x, y); int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue(); // 判断是否符合目标条件(合并你原有的两个判断逻辑) if (color.equals(iron) && !(r == 215 && g == 215 && b == 215)) { targetPixels.add(new Point(x, y)); } } } // 随机选取并执行操作 if (!targetPixels.isEmpty()) { // 生成合法随机索引,获取目标坐标 Point randomTarget = targetPixels.get(random.nextInt(targetPixels.size())); int targetX = randomTarget.x; int targetY = randomTarget.y; // 执行鼠标操作(保留你原有的逻辑) Robot move = new Robot(); mousemoving.mouseGlide(targetX, targetY, 1250, 1000); Runecraft.randomInt(35, 481); move.mousePress(InputEvent.BUTTON1_DOWN_MASK); move.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); System.out.println(iron); } else { // 未找到目标像素时的处理逻辑 System.out.println("未检测到目标像素"); }
关键说明:
- 随机数优化:将
Random实例放在循环外,避免每次创建新实例导致的随机性偏差。 - 逻辑简化:合并了你原有的两个条件判断,让代码更易读。
- 遍历完整性:移除了原代码中的
break,确保遍历完整个屏幕,收集到所有匹配的像素坐标。 - 索引合法性:用
random.nextInt(targetPixels.size())生成索引,保证不会出现数组越界问题。
内容的提问来源于stack exchange,提问作者Daniel Lucas
相关产品推荐
相关产品推荐

