好的,这很容易理解,但由于某些奇怪的原因,我无法让它工作..我已经从实际代码中简化了这个例子。
InputStream is = context.getResources().openRawResource(R.raw.someimage);
Bitmap bitmap = BitmapFactory.decodeStream(is);
try
{
int[] pixels = new int[32*32];
bitmap.getPixels(pixels, 0, 800, 0, 0, 32, 32);
}
catch(ArrayIndexOutOfBoundsException ex)
{
Log.e("testing", "ArrayIndexOutOfBoundsException", ex);
}
为什么我一直得到一个ArrayIndexOutOfBoundsException?像素数组是32x32,据我所知,我正确使用getPixels。图像尺寸为800x800,我试图检索32x32部分。该图像是32位PNG,报告为ARGB-8888。
有什么想法吗?即使我是个白痴!我准备将键盘扔出窗外:D
答案 0 :(得分:9)
使用位图宽度作为步幅,在大多数情况下为32
bitmap.getPixels(pixels, 0, 32, 0, 0, 32, 32);
与800的每一行间隙导致你的pixelarray超出界限
“我正要把键盘扔出窗外”搞笑哈哈
答案 1 :(得分:4)
您正在溢出目标缓冲区,因为您要求在行之间跨越800个条目。
答案 2 :(得分:3)
你得到了OutOfBounds异常,因为stride应用于像素数组而不是原始位图,所以在你的情况下你试图检索不适合你的数组的32 * 800像素。