0

我在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;
        }
    }    
}          
4

2 回答 2

2

您可以尝试使用getPixelswhich 返回一个大数组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);

可能想看看这个

于 2013-10-18T16:46:01.187 回答
0

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

于 2013-10-18T16:30:19.547 回答