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.
- ¿Debo cambiar el tamaño del mapa de bits antes de agregar a un ImageView o dejar que el ImageView cambiar el tamaño del mapa de bits?
- Cómo escribir el texto perfecto de píxeles en el mapa de bits utilizando la pintura para diferentes tamaños de pantalla
- Utilice MediaCodec y MediaExtractor para decodificar y codificar vídeo
- Crear un nuevo mapa de bits y dibujar nuevos píxeles en él
- La imagen de la galería gira automáticamente - Android
¿Tiene alguna idea para esta pregunta?
- Manejo de mapas de bits grandes en Editor de imágenes
- ¿Hay una solución de reproducción de video más rápida que las funciones de AndroidBitmap_xxx?
- ¿Por qué NO obtengo una excepción de memoria perdida?
- MediaStore.Images.Media.getBitmap y fuera de error de memoria
- Descarga rápidamente mapas de bits de la memoria
- Android getPixels () posiblemente un error tonto?
- Android - Definir el fondo de la aplicación
- Comparación de imágenes de mapa de bits en Android
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:
- Los mapas de bits son simplemente recolectados por GC para que el renderizador no tenga datos que usar.
- 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.
- Mapa de Android sin Internet (sin conexión)
- Eliminar todas las notificaciones de la barra de notificaciones