Androidx RenderScript не работает Android API <19 - PullRequest
1 голос
/ 22 апреля 2019

Я использую 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 ]

1 голос
/ 09 мая 2019

Это не имеет ничего общего с вашей реализацией.Это ошибка в библиотеке androidx, и на самом деле, это происходит для меня даже в API 21, поэтому может иметь большее влияние, чем вы испытывали.

Кто-то уже подал проблему здесь .Я следил за этим вопросом довольно давно, к сожалению, не так много прогресса.В настоящее время я хочу перейти на AndroidX для многих своих проектов.

0 голосов
/ 23 апреля 2019

Аргумент Element.U8 для ScriptIntrinsicBlur.create() неверен.

ScriptIntrinsicBlur ожидает Allocation с элементами типа Element.U8, но Allocation с поддержкой Bitmap имеет элементы типа Element.RGBA_8888 (a.k.a Element.U8_4).

попробовать:

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

или вообще:

ScriptIntrinsicBlur.create(rs, allocation.getElement()) 
...