我正在编写一个使用getPixel
读取位图像素的Android应用程序,除了它使用了大量的计算能力之外它还在工作。
所以我尝试使用getPixels
代替并将所有整数保存到整数数组int[]
。
它将计算时间减少到三分之一,但最终结果与以前完全不同。
我不知道getPixels
是否以不同的方式返回整数,或者我是否在代码中遗漏了某些内容。
旧守则(工作):
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
for (int X = 0; X < bitmapWidth; X++)
{
for( int Y = 0; Y < bitmapHeight;Y++)
{
colorValue = Color.red(bitmap.getPixel(X,Y));
//Making use of colorValue here
}
}
新守则(不同结果):
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
int[] intArray = new int[bitmap.getWidth()*bitmap.getHeight()];
bitmap.getPixels(intArray,0,bitmap.getWidth(),0,0,bitmap.getWidth(),bitmap.getHeight());
for (int X = 0; X < bitmapWidth; X++)
{
for( int Y = 0; Y < bitmapHeight;Y++)
{
colorValue = Color.red(intArray[X*Y]);
//Making use of colorValue here
}
}
我知道intArray[X*Y]
在阅读第一行和第一列时会给我intArray[0]
,但如果这些是唯一受影响的地方,那就不会打扰我了。
答案 0 :(得分:3)
您的索引错误。您应该使用y*w + x
而不是x*y
。所以:
colorValue = Color.red(intArray[X + Y * bitmap.getWidth()]);