问题描述:
我使用RenderScrip为图像处理编写了一个简单的演示。在我的演示中,当我使用one-kernal renderscript时,它工作正常。然而,当我使用脚本组连接两个rs-kernals执行时,我发现输出位图有水平条纹。特别是当您选择小尺寸的位图时。
使用one-kernal renderscript时的输出位图:
当我使用脚本组连接两个rs-kernals时的输出位图。注意这两个rs-kernals与我上面使用的相同:
代码:
我相信我的rs-kernal代码是正确的。否则,当使用单内核renderscript时,我无法正确输出图片。问题在于脚本组。
以下是一些关于如何在脚本组中连接rs-kernals的代码:
Type.Builder tb = new Type.Builder(mRs, Element.RGBA_8888(mRs));
tb.setX(baseBitmapWidth);// the size of bitmap never changes during the whole process
tb.setY(baseBitmapHeight);
Type t = tb.create();
ScriptGroup.Builder b = new ScriptGroup.Builder(mRs);
int i = 0;
for (i = 0; i < mOps.size(); i++) {
RSOp op = mOps.get(i);
b.addKernel(op.rsGetKernalID());
}
for (i = 1; i < mOps.size(); i++) {
b.addConnection(t, mOps.get(i - 1).rsGetKernalID(), mOps.get(i)
.rsGetKernalID());
}
mScriptGroup = b.create();
以下是有关如何执行脚本组的一些代码:
Bitmap preparedBitmap = baseBitmap.copy(baseBitmap.getConfig(), true);
mInAllocation = Allocation.createFromBitmap(mRs, baseBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
mOutAllocation = Allocation.createTyped(mRs, mInAllocation.getType());
mScriptGroup.setInput(mOps.get(0).rsGetKernalID(), mInAllocation);
mScriptGroup.setOutput(mOps.get(mOps.size() - 1).rsGetKernalID(),
mOutAllocation);
mScriptGroup.execute();
mOutAllocation.copyTo(preparedBitmap);
答案 0 :(得分:0)
找到了解决方案: 只是使用了许多单核的renderscripts。使用前一个脚本的输出位图作为后一个脚本的输入。