如何在android中快速检查位图上像素的颜色

时间:2013-10-18 16:25:49

标签: android bitmap

我在android中查看了一个位图,我希望获得每个像素的颜色,如果它有一定的值,则计算它,如果它是棕色的。

我使用以下代码。代码可以正常工作,但由于图像中的像素数量很大,因此速度非常慢,这当然需要正确的结果。

for(int i =  1; i <= 100; i++){
    for(int j = 1; j <= 100; j++) {
        int pixel =  bitmap.getPixel(i,j);

        R1 = Color.red(pixel);
        G1 = Color.green(pixel);
        B1 = Color.blue(pixel);

        if((R1 == 155) && (G1 == 155) && (B1 == 155)) {
            countthecolor = countthecolor + 1;
        }
    }    
}          

2 个答案:

答案 0 :(得分:2)

您可以尝试使用getPixels来返回大量length = bitmap.width * bitmap.height

然后,您可以遍历此数组并执行操作。这会快一点,但是现在你必须管理你的内存,因为你已经有了位图,现在这个数组在内存中。因此,如果您不再需要,我建议回收位图。

int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), x, y, myBitmap.getHeight(), myBitmap.getWidth());

您可以使用按位运算进一步优化循环以获取单个RGB值(注意alpha可能存在也可能不存在):

            Alpha = (pixel & 0xff000000)  
            R1 = (pixel >> 16) & 0xff;
            G1 = (pixel >> 8) & 0xff;
            B1 = (pixel & 0xff);

我想看看this

答案 1 :(得分:0)

每个像素调用getPixel需要一段时间。 getPixels可让您一次对一行像素执行计算。