Android Java Bitmap.getPixels返回的数组仅填充-1作为值

时间:2015-08-27 14:04:36

标签: java android bitmap

我遇到了问题,我基本上想要分析一个位图来找到位图上不是白色的最低像素。
因为我想循环遍历位图的每一行像素。见代码:

Bitmap bmp = BitmapFactory.decodeFile(fileName);
for(int i = 0; i < bmp.getHeight(); i++){
    int[] pixels = new int[bmp.getWidth()];
    bmp.getPixels(pixels, 0, bmp.getWidth(), 0, i, bmp.getWidth(), 1);
    //Now when a look at the pixels array at this point all the values are set to -1 everytime
}

fileName有效且位图已加载,我已仔细检查过。此外,像素不能全部具有相同的颜色,因为当我在图像查看器中查看文件时,它看起来像普通图像。 我真的很厌倦这个问题,我正在寻找几个小时,但没有找到任何有用的东西。

我认为它可能与第三个参数有关,即步幅,我仍然不完全了解该参数的用途。

提前致谢

1 个答案:

答案 0 :(得分:2)

您也可以使用4字节颜色代码获取颜色值,而不是3字节颜色代码,其中最重要的字节用于透明度。位图中没有透明度,因此可以忽略该字节。换句话说,你得到黑色的0xFF000000,如果你正在使用int(这是一个带符号的32位,或者四个字节,因此前导位为1,使其为负),则为-16777216。白色为0xFFFFFFFF,如果你正在使用int,则为-1。

我发现当一个位图已被用于android视图时会发生这种情况。根据我的经验,当你从相机捕捉或图像文件中获取位图时,它不会发生。

我使用的解决方案是屏蔽透明度字节,因此我的所有颜色代码都不会被识别为否定:

int color = pixels[i] & 0x00FFFFFF;
相关问题