【问题标题】:Fast way of getting pixels on screen in Java [duplicate]用Java在屏幕上获取像素的快速方法[重复]
【发布时间】:2021-02-11 22:51:28
【问题描述】:

我正在开发一个 Java 项目,该项目涉及快速抓取屏幕上各个像素的颜色。我最初在以下代码中使用 AWT 机器人来完成此任务:

    Robot robot = new Robot();  
    int redVal = 0;
    
    for (int i = 0; i < 255; i++) 
        redVal += robot.getPixelColor(x[i], y[i]).getRed();

其中 x[],y[],代表我想要获取颜色值的各个位置。在相对较快的 CPU 上,轮询 255 个位置需要 1.5 秒以上,对于我的应用程序来说太慢了。有没有更快的方法在 Java 中获取屏幕上特定像素的颜色,可能是通过屏幕捕获然后进行后期处理?

【问题讨论】:

标签: java image image-processing


【解决方案1】:

您的代码将请求屏幕的单个像素,这非常慢。

相反,您可以捕获屏幕(或其部分)的屏幕截图(图像),然后从该(内存中)屏幕截图中读取像素值:

Robot robot = new Robot();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle area = new Rectangle(0, 0, screenSize.width, screenSize.height);
BufferedImage screenshot = robot.createScreenCapture(area);

int x = ...;
int y = ...;
Color pixelColor = new Color(screenshot.getRGB(x, y));

顺便说一句,如果你只需要某些通道,你可以将它们提取如下:

int rgb = screenshot.getRGB(x, y);
int red = (rgb >> 16) & 0xFF;
int green = (rgb >> 8) & 0xFF;
int blue = rgb & 0xFF;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2011-04-17
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多