Mensaje de Android "No se puede generar textura de mapa de bits"

Estoy trabajando con Gallery-widget y un montón de mapas de bits. Para borrar bitmaps utilizo Bitmap.recycle (). Como resultado veo en logcat mensaje siguiente:

08-18 17:49:26.020: INFO/dalvikvm-heap(13847): Grow heap (frag case) to 22.373MB for 2457616-byte allocation 08-18 17:49:26.060: DEBUG/dalvikvm(13847): GC_FOR_ALLOC freed 1K, 36% free 22835K/35143K, paused 27ms 08-18 17:49:26.230: DEBUG/dalvikvm(13847): GC_CONCURRENT freed <1K, 36% free 22835K/35143K, paused 2ms+3ms 08-18 17:49:28.070: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.080: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.110: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.120: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.140: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.160: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.180: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.190: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.210: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.230: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.240: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.260: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.280: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.290: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.310: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.330: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.350: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.360: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.380: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.400: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.410: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.430: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.450: ERROR/OpenGLRenderer(13847): Cannot generate texture from bitmap 08-18 17:49:28.500: INFO/System.out(13847): Image width: 144; height: 108 08-18 17:49:28.570: DEBUG/dalvikvm(13847): GC_FOR_ALLOC freed 4094K, 42% free 20449K/35143K, paused 27ms 08-18 17:49:28.620: INFO/dalvikvm-heap(13847): Grow heap (frag case) to 22.385MB for 2457616-byte allocation 

Y el elemento del widget Galería es negro. Pero la aplicación funciona.

¿Tiene alguna idea para esta pregunta?

Acabo de tener el mismo problema. La cosa es que llamando a recycle () se destruye la referencia de objeto nativo a los datos de píxeles de la imagen y el objeto en sí (bitmap) se marca "dead". Si no hay ningún otro objeto haciendo referencia a esos datos serán liberados por GC. Así que dos cosas posibles te están sucediendo:

  1. Los mapas de bits son simplemente recolectados por GC para que el renderizador no tenga datos que usar.
  2. Como el mapa de bits en sí está marcado como muerto no puede leer / escribir píxeles de / a él

Así que si está utilizando / referenciando este mapa de bits y lo recicla, simplemente niega el acceso a él para todos. Al menos lo entiendo de esta manera. Lea atentamente:

http://developer.android.com/reference/android/graphics/Bitmap.html#recycle%28%29

Por lo tanto, debe utilizar reciclar sólo si está seguro de que nadie está utilizando / haciendo referencia al objeto de mapa de bits. Espero que ayude.

Como rápidamente dijo , probablemente está tratando de acceder a mapas de bits que han sido marcados para Garbage Collection.

Una solución simple para esto es hacer una comprobación isRecycled() antes de devolver un mapa de bits:

 // ... /** * Will return a usable Bitmap or null if the Bitmap was not found. */ public Bitmap getBitmapForGallery(int uniqueImageId) { Bitmap bitmap; // The code to fetch bitmap from cache is here. // ... return bitmap.isRecycled() ? null : bitmap; } // ... 

Esto también sucede cuando reutilizamos un mapa de bits

Eg.bitmap = getResizedBitmap (mapa de bits, 500); Aquí he utilizado bitmap de nuevo para cambiar el tamaño, que causó un problema.

  • Convertir vista a mapa de bits en Android
  • El mapa de bits guardado en android tiene 3 bytes de largo cuando se lee
  • ¿Por qué setImageBitmap no tiene efecto en ImageButton personalizado?
  • Resize Drawable en Android
  • OutOfMemoryError: el tamaño de mapa de bits supera el presupuesto de VM: - Android
  • Si se establece myBitmap = null sin recycle (), qué diferencia con recycle ()
  • ¿Hay lejos para conseguir uri del mapa de bits con hacia fuera excepto él a sdcard?
  • Cargar imagen de url en la notificación de Android
  • Android: El código QR generado que usa Zxing tiene márgenes (no es apropiado para el área)
  • Excepción en unbindDrawables
  • Cómo capturar el error 'Bitmap demasiado grande para ser cargado en una textura'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.