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

标签 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
}

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

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

提前致谢

最佳答案

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

我发现当位图用于 Android View 时,Android 中会发生这种情况。根据我的经验,当您从相机捕获或图像文件获取位图时,不会发生这种情况。

我使用的解决方案是屏蔽透明度字节,这样我的颜色代码就不会被识别为负值:

int color = pixels[i] & 0x00FFFFFF;

关于java - Android Java Bitmap.getPixels 返回仅填充 -1 作为值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251557/

相关文章:

java - maven 没有下载我添加的任何依赖项

android - 如何压缩Camera.takepicture拍摄的照片

java - Gwt 序列化

java - 在运行时在 netbeans 中启用断言

android - 如何摆脱 Xamarin Android 构建警告?

Android:如何在 Activity 之间制作动画?

android - ListView 滚动时覆盖另一个布局

android - 在android中动画位图图像

c# - 在C#中将图像转换为图标

java - 如何将文本文件中的值存储到适当的变量中,以及如何使该代码块更清晰?