3

我正在尝试获取 android.renderscript.Allocation 对象以将其结果写入 int 数组。代码很短,但我很难破译如何修复它。

int[] result = new int[bitmap.getWidth() * bitmap.getHeight()];
inAllocation = Allocation.createFromBitmap(mRS, src,Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
outAllocation = Allocation.createTyped(mRS, inAllocation.getType());
outAllocation.copyTo(result);

我得到的例外是:

10-15 19:21:07.084: E/AndroidRuntime(9021): Caused by: android.renderscript.RSIllegalArgumentException: 32 bit integer source does not match allocation type UNSIGNED_8

我的预感是我需要通过 Androids 内置函数创建 int 数组,但我无法理解我应该使用的内容。如果我将方法(和结果对象)的返回类型更改为位图,代码就可以工作 - 但我想以数组的形式返回像素。

谢谢

4

2 回答 2

5

您应该将 byte[] 用于 UNSIGNED_8,而不是 int[]。

于 2013-10-15T17:40:29.340 回答
1

感谢蒂姆默里的回答。

除了将int[]修改为byte[]之外,还应将数组的大小更改为:

bitmap.getWidth() * bitmap.getHeight() * 4 

因为一个 int 可以分为四个字节。

于 2020-12-01T12:40:24.517 回答