android - 不可变位图崩溃错误

标签 android bitmap

java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
at android.graphics.Canvas.<init>(Canvas.java:127)
at app.test.canvas.StartActivity.applyFrame(StartActivity.java:214)
at app.test.canvas.StartActivity$1.onClick(StartActivity.java:163)
at android.view.View.performClick(View.java:4223)
at android.view.View$PerformClick.run(View.java:17275)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)

我从开发者控制台收到这个崩溃错误..我不明白是什么问题..

    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inScaled = true;
    opt.inPurgeable = true;
    opt.inInputShareable = true;
    Bitmap brightBitmap = BitmapFactory.decodeResource(getResources(), position, opt); 
    brightBitmap = Bitmap.createScaledBitmap(brightBitmap, 550, 550, false);
    chosenFrame = brightBitmap;
    Bitmap workingBitmap = Bitmap.createBitmap(chosenFrame);
    workingBitmap = Bitmap.createBitmap(workingBitmap); 
    Canvas c = new Canvas(workingBitmap);

我觉得和这个有关?

最佳答案

您必须将 workingBitmap 转换为 Mutable Bitmap 才能在 Canvas 上绘图。 (注意:这种方法不利于节省内存,会占用额外的内存)

Bitmap workingBitmap = Bitmap.createBitmap(chosenFrame);
Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(mutableBitmap);

这个答案有助于不要浪费内存 Convert immutable bitmap to a mutable bitmap

关于android - 不可变位图崩溃错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119582/

相关文章:

android - 在 Android 中使用 setShadowLayer() 复制图像

android - 我可以在 @Composable 之外使用 Jetpack 撰写图标吗?

android - 在 Material Design 中呈现的 Android Lollipop 半透明渐变状态栏

android - 附加到gmail时pdf的大小显示为0

android - 如何仅指定一次 LinearLayout 元素之间的间距?

java - 获取错误 : cannot resolve symbol for 'compress' for bitmap. 压缩(Bitmap.CompressFormat.PNG,0,流);

Android:如何将字节数组转换为位图?

Android Studio - 顶部的白色条

android - Lollipop AppCompat-v7 21 - 属性 "theme"已定义

c# - 从 RGB 整数转换为十六进制