我在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;
}
}
}
答案 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
可让您一次对一行像素执行计算。