我使用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);
结果如下:
现在我想做同样的事情,但是在垂直方面:
我尝试了相同的逻辑,但它没有工作,我也看不出我做错了什么:
int[] verticalMiddleArray = new int[height];
source.getPixels(verticalMiddleArray, 0, width, width / 2, 0, 1, height -1 );
使用此代码,我收到ArrayIndexOutOfBoundsException
例外。
现在位图的大小是32x32。
答案 0 :(得分:3)
该方法的文档要么完全错误,要么无意中具有误导性,这取决于解释。对于stride
参数,它指出:
stride
int
:要在行之间跳过的像素数[]必须是> =位图的宽度)。可以是否定的。
这里,“位图的宽度”并不是指源的宽度,而是目的地的宽度。在进行检查时,您将获得ArrayIndexOutOfBoundsException
,以确保提供的数组足以容纳所请求的数据。由于源位图比目标宽,因此数据所需的大小大于您传递的数组的大小。
垂直切片的调用应为:
source.getPixels(verticalMiddleArray, 0, 1, width / 2, 0, 1, height);
(我假设您有height - 1
作为尝试修复。)