#android #kotlin
Вопрос:
Я пытаюсь наложить два растровых изображения. Этот код отлично работает на Android ниже 9. На Android 9 и выше происходит сбой приложения.
private fun overlay(base: Bitmap, blend: Bitmap): Bitmap { return try { val result: Bitmap = base.copy(Bitmap.Config.ARGB_8888, true) val p = Paint() p.xfermode = PorterDuffXfermode(PorterDuff.Mode.ADD) p.shader = BitmapShader(blend, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP) val c = Canvas() c.setBitmap(result) c.drawBitmap(base, 0f, 0f, null) c.drawRect(0f, 0f, base.width.toFloat(), base.height.toFloat(), p) result } catch (e: Exception) { println(e.message.toString()) base } }
E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс: com.ex.изображение, PID: 26562 java.lang.Исключение IllegalArgumentException: Программный рендеринг не поддерживает аппаратные растровые изображения в android.graphics.BaseCanvas.onhwbitmapinswрежим(базовый код. java:632) на android.графика.BaseCanvas.throwifhwbitmapinswрежим(базовый код. java:639) на android.графика.BaseCanvas.throwIfCannotDraw(базовый код.java:73) на android.графика.MiuiCanvas.throwIfCannotDraw(MiuiCanvas.java:329) на android.графика.BaseCanvas.Рисованная карта(BaseCanvas.java:113) на android.графика.MiuiCanvas.Рисованная карта(MiuiCanvas.java:98) на android.графика.Canvas.drawBitmap(Canvas.java:1613) на com.ex.изображение.фрагменты.Фрагмент фильтра.наложение(фрагмент фильтра.кт:103) на com.ex.изображение.фрагменты.FiltersFragment.applyFilter(FiltersFragment.kt:86) в com.ex.адаптеры изображений.FilterRecyclerAdapter.onBindViewHolder$лямбда-0(FilterRecyclerAdapter.kt:39) в com.ex.адаптеры изображений.FilterRecyclerAdapter.$r8$лямбда$KexXVg24JaLUI6vIkMTUBOYKnlY(Неизвестно Источник:0) в com.ex.адаптеры изображений.FilterRecyclerAdapter$$ExternalSyntheticLambda0.onClick(Неизвестно Источник:4) на android.view.View.performClick(View.java:7509) в android.view.View.performClickInternal(View.java:7486) на android.view.View.доступ к$3600(View.java:841) в android.view.View$performClick.run(View.java:28710) в android.os.Handler.handleCallback(обработчик.java:938) в android.os.Handler.DispatchMessage(обработчик.java:99) в android.os.Looper.loop(Looper.java:236) в android.app.ActivityThread.main(ActivityThread.java:8056) на java.lang.размышляйте.Метод.вызов(Собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Примечание: Я уже выключил приложение HARDWARE_ACCELERATED
для Android 9 выше.
Комментарии:
1. пробовал, не получается. Я не думаю, что это из-за неизменности. Если это так, это приведет к сбою на Android ниже 9