我试图创建一个获取renderScript RGBA图像并返回带有字节值的矩阵的函数。
问题是它返回了我以下错误,我搜索了信息但找不到任何关于它的信息,我找到的唯一选择是输出是相同的类型,只将结果保存到其中一个通道(例如红色)。
错误:
10-15 16: 34: 35.006: E / AndroidRuntime (771): android.support.v8.renderscript.RSIllegalArgumentException: Invalid combination usage.
RenderScript代码:
void rootTable(const uchar4 *v_in, uchar *v_out){
*v_out = (int)rsGetElementAt_uchar(params, getIndexParams_Table(v_in->r>>3, v_in->g>>3, v_in->b>>3));
}
Java代码:
Allocation imageInAlloc = Allocation.createFromBitmap(r, bmp, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
byte[] arrayParams = this.readParamByte(R.raw.params_table);
byte[] arrayColor = new byte[bmp.getWidth()*bmp.getHeight()];
Allocation params_table = Allocation.createSized(r, Element.I8(r), arrayParams.length);
Allocation dataOut = Allocation.createSized(r, Element.U8(r), bmp.getWidth(), bmp.getHeight());
params_table.copyFrom(arrayParams);
script.set_params(params_table);
script.forEach_rootTable(imageInAlloc, dataOut);
dataOut.copyTo(arrayColor);
该功能是正确的,因此进入和退出的失败率是distitnos但是没有办法做到这一点?
非常感谢!!
答案 0 :(得分:0)
您上面报告的错误是否还有其他堆栈跟踪信息?另外,你改变了单词的顺序吗?我无法找到"无效的组合使用情况"在我们的代码库中的任何地方,但我确实发现"无效的使用组合" (遗憾的是,对于你所看到的其他内容仍然没有意义)。我发现至少有一个错误。你的" params"分配是I8类型,但是你将它作为uchar从中拉出来。这不起作用,所以你需要调用rsGetElementAt_int(),这样你就可以摆脱你的int转换。
答案 1 :(得分:-1)
如果有人遇到同样的问题,则renderScript会检查输入和输出是否为同一类型等。为避免这种情况,您必须修改ScriptC _" filename" .java,并查找forEach _&#34 ;功能"功能并删除以下内容:
// Verify dimensions
Type tIn = ain.getType();
Type tOut = aout.getType();
if ((tIn.getCount() != tOut.getCount()) ||
(tIn.getX() != tOut.getX()) ||
(tIn.getY() != tOut.getY()) ||
(tIn.getZ() != tOut.getZ()) ||
(tIn.hasFaces() != tOut.hasFaces()) ||
(tIn.hasMipmaps() != tOut.hasMipmaps())) {
throw new RSRuntimeException("Dimension mismatch between input and output parameters!");
}