2011-08-23 73 views
3

the method getPixelColor(int x,int y) from the Robot class的工作原理是什么?我尝试这样的代码片段:我的电脑,这是一个酷睿2上Robot的getPixelColor(int x,int y)方法是如何工作的?

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

} 

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

System.out.println("fsadf"); 

,并花了一秒或更短执行打印语句。然而,当我在我的笔记本电脑上运行这个相同的代码时,这是一个核心的i3,花费了更多的时间(大约2-3秒)。

这是什么原因?这是否与屏幕质量或类似的东西?我怎么解决这个问题?

+0

*花费1秒或更少的时间来执行“*一个聪明的虚拟机可能意识到循环完全没有(或至少达到)完全没有任何东西,从而完全消除它。或换句话说,它可能不是硬件,但是虚拟机是不同的,尽管一般的观点是这样的:1)不要执行过早的优化; 2)如果代码确实需要优化,不要将这些琐碎的,不相关的测试作为设计决策的基础。该代码甚至不会编译,因为'robos'在循环中不在显示范围内。 –

回答

8

我该如何解决这个问题?

请勿使用机器人逐像素地获取颜色。使用Robot创建屏幕的BufferedImage。然后,您可以使用BufferedImage的getRGB()方法来获取表示像素颜色的int值。然后你可以使用这个int创建一个Color Object,或者直接解析出红色/绿色/蓝色值。

+0

以及像使用机器人一样使用机器人究竟有什么错误? – blenddd

+1

没有什么错,它只是不是很有效,因为你已经注意到了。要进行一次系统调用来创建图像要比数千次系统调用一次获取像素效率高得多。 – camickr

+0

嗯,你可以显示我一个小代码片段如何使用这个getRGB? – blenddd

相关问题