Androidx RenderScript无法运行android api <19

时间:2019-04-22 10:16:17

标签: renderscript

我在模糊图像上使用了androidx,但是当运行android api <19崩溃应用程序时。 当我以android> 19运行时,我运行正常,不是崩溃应用程序,如果我将android normal与“ android.support.v8.renderscript”一起使用,则没有崩溃应用程序。 在build.gradle。我添加了:

  renderscriptTargetApi 18
    renderscriptSupportModeEnabled true

代码应用:

public static Bitmap blurBitmap(Bitmap bitmap,
                                float radius) {        //Create renderscript
    RenderScript
            rs = RenderScript.create(MyApplication.getInstance());

    //Create allocation from Bitmap
    Allocation allocation = Allocation.createFromBitmap(rs,
            bitmap);
    Type t = allocation.getType();

    //Create allocation with the same type
    Allocation blurredAllocation = Allocation.createTyped(rs,
            t);

    //Create script
    ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8(rs));

    //Set blur radius (maximum 25.0)
    blurScript.setRadius(radius);
    //Set input for script
    blurScript.setInput(allocation);
    //Call script for output allocation
    blurScript.forEach(blurredAllocation);

    //Copy script result into bitmap
    blurredAllocation.copyTo(bitmap);

    //Destroy everything to free memory
    allocation.destroy();
    blurredAllocation.destroy();
    blurScript.destroy();
    t.destroy();
    rs.destroy();
    return bitmap;
}

2 个答案:

答案 0 :(得分:1)

这与您的实现无关。这是androidx库中的一个错误,实际上,即使是在API 21上,它也会发生在我身上,因此它的影响可能比您所经历的还要大。

有人已经提出了问题here。不幸的是,我已经关注这个问题很长时间了。目前,对于我的许多项目而言,这是让我迁移到AndroidX的最佳选择。

答案 1 :(得分:0)

Element.U8的{​​{1}}参数不正确。

ScriptIntrinsicBlur.create()期望ScriptIntrinsicBlur的元素类型为Allocation,但是受Element.U8支持的Bitmap的元素类型为Allocation (又名Element.RGBA_8888)。

尝试:

Element.U8_4

或一般而言:

ScriptIntrinsicBlur.create(rs, Element.RGBA_8888(rs))