如何使用Bitmap getPixels函数

时间:2017-12-01 22:20:38

标签: java android android-image android-bitmap

我使用Bitmap.getPixels和下面的代码在位图图像的中间获得一行1像素的高度:

int width = source.getWidth();
int height = source.getHeight();
int[] horizontalMiddleArray = new int[width];

source.getPixels(horizontalMiddleArray, 0, width, 0, height / 2, width, 1);

结果如下:

enter image description here

现在我想做同样的事情,但是在垂直方面:

enter image description here

我尝试了相同的逻辑,但它没有工作,我也看不出我做错了什么:

int[] verticalMiddleArray = new int[height];
source.getPixels(verticalMiddleArray, 0, width, width / 2, 0, 1, height -1 );

使用此代码,我收到ArrayIndexOutOfBoundsException例外。

现在位图的大小是32x32。

1 个答案:

答案 0 :(得分:3)

该方法的文档要么完全错误,要么无意中具有误导性,这取决于解释。对于stride参数,它指出:

  

stride int:要在行之间跳过的像素数[]必须是> =位图的宽度)。可以是否定的。

这里,“位图的宽度”并不是指源的宽度,而是目的地的宽度。在进行检查时,您将获得ArrayIndexOutOfBoundsException,以确保提供的数组足以容纳所请求的数据。由于源位图比目标宽,因此数据所需的大小大于您传递的数组的大小。

垂直切片的调用应为:

source.getPixels(verticalMiddleArray, 0, 1, width / 2, 0, 1, height);

(我假设您有height - 1作为尝试修复。)