我怀疑是bitmap.getPixels(allPixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
正在处理1D数组。但是位图总是2D图像表示。但为什么会出现单维阵列?
如何在1D数组中打包字节?
我知道这是个问题,但我无法理解。
由于
答案 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];
...