从图像获取像素值时出错

时间:2014-03-03 17:14:50

标签: android android-imageview android-image

正在使用android项目,在我的项目中,我想将图像的像素值存储到数组中,我使用了getPixels()函数并将其存储在名为像素的数组中,但是当我尝试要在TextView中打印它,我会得到一些negetive值,如-1623534,等等。为什么会这样。 ?

这是我的代码: -

Bitmap result = BitmapFactory.decodeFile(filePath);
        TextView resultText=(TextView)findViewById(R.id.txtResult);
        try
        {
            int pich=(int)result.getHeight();
            int picw=(int)result.getWidth();

            int[] pixels = new int[pich*picw];
            result.getPixels(pixels, 0, picw, 0, 0, picw, pich);


            //To convert  into String

            StringBuffer buff = new StringBuffer();
            for (int i = 0; i <100; i++) 
              {
                   // getting values from array
                 buff.append(pixels[i]).append("  ");
              }


             //To save the binary in newString

             String newString=new String(buff.toString());

            resultText.setText(newString);

我在其他一些帖子中找到了

            int R, G, B;

            for (int y = 0; y < pich; y++)
            {
                for (int x = 0; x < picw; x++)
                {
                    int index = y * picw + x;
                    R = (pixels[index] >> 16) & 0xff;     //bitwise shifting
                    G = (pixels[index] >> 8) & 0xff;
                    B = pixels[index] & 0xff;

                    //R,G.B - Red, Green, Blue
                    //to restore the values after RGB modification, use 
                    //next statement
                    pixels[index] = 0xff000000 | (R << 16) |  (G << 8) | B;
                }
            }

所以我将我的代码修改为: -

Bitmap result = BitmapFactory.decodeFile(filePath);
        TextView resultText=(TextView)findViewById(R.id.txtResult);
        try
        {
            int pich=(int)result.getHeight();
            int picw=(int)result.getWidth();

            int[] pixels = new int[pich*picw];
            result.getPixels(pixels, 0, picw, 0, 0, picw, pich);

            int R, G, B;

            for (int y = 0; y < pich; y++)
            {
                for (int x = 0; x < picw; x++)
                {
                    int index = y * picw + x;
                    R = (pixels[index] >> 16) & 0xff;     //bitwise shifting
                    G = (pixels[index] >> 8) & 0xff;
                    B = pixels[index] & 0xff;

                    //R,G.B - Red, Green, Blue
                    //to restore the values after RGB modification, use 
                    //next statement
                    pixels[index] = 0xff000000 | (R << 16) | (G << 8) | B;
                }
            }

            //To convert  into String

            StringBuffer buff = new StringBuffer();
            for (int i = 0; i <100; i++) 
            {
                   // getting values from array
                 buff.append(pixels[i]).append("  ");
            }


             //To save the binary in newString

            String newString=new String(buff.toString());

            resultText.setText(newString);

这是对的吗?即使在修改之后我也得到了新的价值,请帮助我,提前谢谢

1 个答案:

答案 0 :(得分:1)

您获得负值的原因如下: 图像的每个像素包含4个值(红色,绿色,蓝色,alpha)。每个值有8位(一个字节)。所有4个一起具有正好32位,这是整数值的大小。但是当你打印一个(有符号)整数时,第一位被解释为符号标志,所以你可以得到负值,如果这个位设置为1(当第一个通道是> = 128时发生)。 p>

要从像素中获取RGB值,我通常会使用:

int pixel = bmp.getPixel(x, y);
int red = Color.red(pixel);
int green = Color.green(pixel);
int blue = Color.blue(pixel);