Android getPixels()可能是一个愚蠢的错误?

时间:2011-09-09 15:45:21

标签: android bitmap

好的,这很容易理解,但由于某些奇怪的原因,我无法让它工作..我已经从实际代码中简化了这个例子。

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

3 个答案:

答案 0 :(得分:9)

使用位图宽度作为步幅,在大多数情况下为32

 bitmap.getPixels(pixels, 0, 32, 0, 0, 32, 32);

与800的每一行间隙导致你的pixelarray超出界限

“我正要把键盘扔出窗外”搞笑哈哈

答案 1 :(得分:4)

答案 2 :(得分:3)

你得到了OutOfBounds异常,因为stride应用于像素数组而不是原始位图,所以在你的情况下你试图检索不适合你的数组的32 * 800像素。