Error de error de mapa de bits inmutable
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)
Consigo este error del desplome de la consola del revelador. No entiendo cuál es el problema.
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);
Creo que está relacionado con esto?
- Mapa de bits de mosaico de Android
- Cambiar la profundidad de bits de Bitmap
- ¿Reutiliza Android las imágenes cargadas desde el recurso?
- Cómo establecer el tamaño del mapa de bits en ZXing?
- Elige la imagen de la tarjeta sd, cambia el tamaño de la imagen y la guarda de nuevo en la tarjeta sd
- OutofMemoryError: el tamaño de mapa de bits supera el presupuesto de VM (Android)
- Android: Error al usar el mapa de bits para mostrar la imagen usando el estudio de Android
- No se puede obtener la calidad de imagen completa de la cadena base64
- ¿Cómo subir varios archivos de imagen en el servidor?
- Cómo cambiar el color de imagen de mapa de bits en android?
- ¿Mostrar un mapa enorme con un buen rendimiento en Android?
- Cómo cambiar el color de fondo de mapa de bits a transparente y de fondo no debe arrastrar?
- Convertir Bitmap en la memoria a Bitmap con Bitmap.Config.RGB_565
Tienes que convertir tu workingBitmap
a Mutable Bitmap
para dibujar sobre Canvas
. (Nota: este método no ayuda a ahorrar memoria, utilizará memoria adicional)
Bitmap workingBitmap = Bitmap.createBitmap(chosenFrame); Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true); Canvas canvas = new Canvas(mutableBitmap);
Esta respuesta ayuda a no perder la memoria Convertir mapa de bits inmutable a un mapa de bits mutable
BitmapFactory.decodeResource()
devuelve una copia inmutable del mapa de bits y no se puede dibujar en su lienzo. Para obtener su lienzo, necesita obtener una copia mutable del mapa de bits de las imágenes y que puede hacerse con una sola adición de código de línea.
opt.inMutable = true;
Añadir esa línea a su código y debe abordar el accidente.
Con el fin de minimizar el uso de memoria, puede comprobar este post sobre la conversión / decodificación de un mapa de bits mutable directamente desde los recursos:
- Error al inflar la clase android.support.design.widget.NavigationView
- (Retrofit) No se pudo localizar el convertidor para la aplicación de bloqueo de clase