You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从屏幕指定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("未检测到目标像素");
}

关键说明:

  1. 随机数优化:将Random实例放在循环外,避免每次创建新实例导致的随机性偏差。
  2. 逻辑简化:合并了你原有的两个条件判断,让代码更易读。
  3. 遍历完整性:移除了原代码中的break,确保遍历完整个屏幕,收集到所有匹配的像素坐标。
  4. 索引合法性:用random.nextInt(targetPixels.size())生成索引,保证不会出现数组越界问题。

内容的提问来源于stack exchange,提问作者Daniel Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:18:29