在java中获取像素颜色

时间:2014-08-03 20:50:08

标签: java performance

我知道这是一项昂贵的操作,我已经尝试使用robot.getPixelColor()函数,但它运行缓慢,只能在一秒钟内计算5次。

我所说的是,5次对于我实际想做的事情来说太小了,但是20应该足够了。所以我问你是否可以建议我对我的实际代码进行一些优化以获得这个结果。

我的代码是:

while (true) {
    color = robot.getPixelColor(x, y);
    red = color.getRed();
    green = color.getGreen();
    blue = color.getBlue();
    // do a few other operations in constant time
}

我不知道这是否会有所帮助,但xy不会在while循环内发生变化。所以它始终是相同的像素坐标。

提前致谢!

编辑:像素颜色将从与java程序同时运行的游戏中获取,它将不断变化。唯一的是它始终是相同的坐标。

1 个答案:

答案 0 :(得分:1)

我假设颜色表示为编码为ARGB的32位int。在这种情况下,您可以只使用位掩码来提取颜色,而不是调用方法,这可能最终会更快,因为您不会浪费调用方法的开销。我建议做这样的事情:

int color = robot.getPixelColor(x,y);
int redBitMask = 0x00FF0000;
int greenBitMask = 0x0000FF00;
int blueBitMask = 0x000000FF;
int extractedRed = (color & redBitMask) >> 16;
int extractedGreen = (color & greenBitMask) >> 8;
int extractedBlue = (color & blueBitMask);

位移和按位操作往往非常快。