Bitmap.getPixel()处理1D数组

时间:2017-11-21 06:10:28

标签: android arrays image bitmap

我怀疑是bitmap.getPixels(allPixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); 正在处理1D数组。但是位图总是2D图像表示。但为什么会出现单维阵列?

如何在1D数组中打包字节?

我知道这是个问题,但我无法理解。

由于

1 个答案:

答案 0 :(得分:1)

  

但是位图总是2D图像表示。但为什么会这样   单维数组?

位图存储在内存中作为1维字节数组(不仅是位图,而是大多数二进制数据)。位图的所有像素逐行放置在存储器中,每行具有位图宽度。我认为,方法Bitmap.getPixels()除了将内存中的字节复制到int[]数组之外什么都不做。您可以自由地创建自己的方法,将1D数组转换为2D数组,但在大多数情况下,这不是必需的(见下文)。

  

如何在1D数组中打包字节?

方法Bitmap.getPixels()接受并填充int[]数组,其中位图宽度的长度乘以位图高度。与方法参数中指定的矩形对应的结果数组部分将填充像素颜色,其余数组将填充零。

从这个数组中获取所需像素的颜色非常容易。像素索引为x + y * bitmapWidth

...
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] allPixels = new int[width * height];
bitmap.getPixels(allPixels, 0, width, 0, 0, width, height);
int x = 64;
int y = 128;
int pixelColor = allPixels[x + y * width];
...