centerzx / ShapeBlurView

高斯模糊蒙层库
207 stars 33 forks source link

Software rendering doesn't support hardware bitmaps #20

Open shaozucheng opened 5 months ago

shaozucheng commented 5 months ago

我也遇到这个问题了,可有解法 java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps at android.graphics.BaseCanvas.onHwBitmapInSwMode(BaseCanvas.java:699) at android.graphics.BaseCanvas.throwIfHwBitmapInSwMode(BaseCanvas.java:706) at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:81) at android.graphics.BaseCanvas.drawBitmap(BaseCanvas.java:139) at android.graphics.Canvas.drawBitmap(Canvas.java:1605) at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:549) at android.view.View.drawBackground(View.java:22935) at android.view.View.draw(View.java:22696) at android.view.View.draw(View.java:22577) at android.view.ViewGroup.drawChild(ViewGroup.java:4528) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289) at android.view.ViewOverlay$OverlayViewGroup.dispatchDraw(ViewOverlay.java:255) at android.view.View.draw(View.java:22713) at com.android.internal.policy.DecorView.draw(DecorView.java:821) at net.center.blurview.ShapeBlurView$a.onPreDraw(Unknown Source:192) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1093) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3362) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2179) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8793) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037) at android.view.Choreographer.doCallbacks(Choreographer.java:845) at android.view.Choreographer.doFrame(Choreographer.java:780) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

OYXS520 commented 5 months ago

同问,也遇到这个问题了 FATAL EXCEPTION: main Process: com.yoocar.kanjian, PID: 13639 java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps at android.graphics.BaseCanvas.throwIfHwBitmapInSwMode(BaseCanvas.java:706) at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:81) at android.graphics.BaseCanvas.drawBitmap(BaseCanvas.java:139) at android.graphics.Canvas.drawBitmap(Canvas.java:1604) at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:549) at android.widget.ImageView.onDraw(ImageView.java:1446) at android.view.View.draw(View.java:23195) at android.view.View.draw(View.java:23068) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1994) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at androidx.fragment.app.FragmentContainerView.drawChild(FragmentContainerView.kt:235) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at androidx.fragment.app.FragmentContainerView.dispatchDraw(FragmentContainerView.kt:225) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at androidx.fragment.app.FragmentContainerView.drawChild(FragmentContainerView.kt:235) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at androidx.fragment.app.FragmentContainerView.dispatchDraw(FragmentContainerView.kt:225) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1994) at android.view.View.draw(View.java:23198) at android.view.View.draw(View.java:23068) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at android.view.View.draw(View.java:23066) at android.view.ViewGroup.drawChild(ViewGroup.java:4529) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4290) at android.view.View.draw(View.java:23198) at com.android.internal.policy.DecorView.draw(DecorView.java:819) at net.center.blurview.ShapeBlurView$1.onPreDraw(ShapeBlurView.java:506) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1093) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3491) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2286) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8948) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239) at android.view.Choreographer.doCallbacks(Choreographer.java:899) at android.view.Choreographer.doFrame(Choreographer.java:832) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288)

OYXS520 commented 5 months ago

找到解决的方法了,是Glide或者Coil库加载图片时使用了硬件加速,与该库的绘制有冲突,加载图片时把硬件加速关了就行了。给一个扩展方法

fun ImageView.disableHardwareLoad(url:String){
    val request = ImageRequest.Builder(this.context)
        .data(url)
        .allowHardware(false) // 禁用硬件加速,不然和高斯模糊的库一起用会报错
        .target(this)
        .build()
    Coil.imageLoader(this.context).enqueue(request)
}

问题分析 https://juejin.cn/post/6844903764525056008 参考链接 Software rendering doesn't support hardware bitmaps #159

shaozucheng commented 4 months ago

找到解决的方法了,是Glide或者Coil库加载图片时使用了硬件加速,与该库的绘制有冲突,加载图片时把硬件加速关了就行了。给一个扩展方法

fun ImageView.disableHardwareLoad(url:String){
    val request = ImageRequest.Builder(this.context)
        .data(url)
        .allowHardware(false) // 禁用硬件加速,不然和高斯模糊的库一起用会报错
        .target(this)
        .build()
    Coil.imageLoader(this.context).enqueue(request)
}

问题分析 https://juejin.cn/post/6844903764525056008 参考链接 Software rendering doesn't support hardware bitmaps #159

感谢大佬,已解决