【问题标题】:How does Robot's getPixelColor(int x, int y) method work?Robot 的 getPixelColor(int x, int y) 方法是如何工作的?
【发布时间】:2011-08-23 23:45:00
【问题描述】:

the method getPixelColor(int x,int y) from the Robot class 究竟是如何工作的?我试过这个代码片段:

try 
{
     Robot robos = new Robot();
}
catch (AWTException e) 
{

}

for (int i = 0; i < 100; i++)
    robos.getPixelColor(0, 0);

System.out.println("fsadf");

在我的电脑上,这是一个 core 2 duo,执行打印语句需要一秒钟或更短的时间。但是,当我在我的 i3 笔记本电脑上运行相同的代码时,花费的时间要长得多(大约 2-3 秒)。

这背后的原因是什么?它与屏幕质量或类似的东西有关吗?我该如何解决这个问题?

【问题讨论】:

  • 执行大约需要 1 秒或更短时间" 智能 VM 可能会意识到循环完全没有(或至少实现)什么,因此将其完全删除。或者换一种说法,可能不是硬件而是虚拟机是不同的。虽然一般点。1)不要执行过早的优化。2)如果代码确实需要优化,不要基于设计决策在这些琐碎的、不相关的测试中。顺便说一句 - AFAIU 代码甚至无法编译,因为 robos 超出了循环范围。

标签: java time colors pixel awtrobot


【解决方案1】:

我该如何解决这个问题?

不要使用机器人逐像素获取颜色。使用机器人创建屏幕的 BufferedImage。然后可以使用 BufferedImage 的 getRGB() 方法获取表示像素颜色的 int 值。然后,您可以使用此 int 创建一个颜色对象或直接解析出红色/绿色/蓝色值。

【讨论】:

  • 像我这样使用机器人到底有什么问题?
  • 没有什么问题,只是效率不如你所见。进行一次系统调用来创建图像比进行数千次系统调用一次获取一个像素要高效得多。
  • 嗯,你能告诉我一个小代码片段如何准确地使用这个 getRGB 吗?
  • +1 表示createScreenCapture()。相关示例here.
猜你喜欢
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多