RenderScript: использование ScriptGroup для обработки изображений приводит к появлению горизонтальных полос
Описание проблемы:
Я пишу простую демонстрацию, используя RenderScrip для обработки изображений. В моей демонстрации, когда я использую одноядерный Renderscript, он работает нормально. Тем не менее, когда я использую группу сценариев для соединения двух rs-ядер для выполнения, я нашел выходной битовый массив с горизонтальными полосами. Особенно, когда вы выбрали растровое изображение с небольшим размером.
Выходной битовый массив, когда я использую одноядерный рендерскрипт:
Вывод растрового изображения, когда я использую группу сценариев для соединения двух rs-ядер. Обратите внимание, что эти два rs-kernals точно такие же, как те, что я использую выше:
коды:
Я считаю, что мои коды в rs-kernal верны. В противном случае я не могу получить правильное изображение на выходе при использовании одноядерного рендеринга. Проблема в скриптовой группе.
Вот несколько кодов о том, как я подключаю 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);
1 ответ
Нашли решение: просто использовали вместо этого многоканальные отрисовки. Используйте выходной растр предыдущего сценария в качестве входного для последующего.