使用位图getPixels,而不是位图getPixel返回不同的结果?

时间:2013-11-18 09:16:31

标签: java android

我正在编写一个使用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],但如果这些是唯一受影响的地方,那就不会打扰我了。

1 个答案:

答案 0 :(得分:3)

您的索引错误。您应该使用y*w + x而不是x*y。所以:

colorValue = Color.red(intArray[X + Y * bitmap.getWidth()]);