Los mapas de bits en ICS se cargan con formato de píxeles incorrecto

Encontré el siguiente problema. Cuando cualquier mapa de bits se carga desde recursos por una aplicación que se ejecuta en Ice Cream Sandwich, es probable que se procese incorrectamente como si se haya decodificado en el formato, que difiere del formato de ventana actual, sin aplicar dither. Sin embargo, tanto el formato de decodificación como el formato de ventana se han definido explícitamente:

BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inPreferredConfig = Bitmap.Config.RGBA_8888; 

y

 getWindow().setFormat(PixelFormat.RGBA_8888); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); 

Aquí hay capturas de pantalla de la aplicación de prueba tomada de este artículo que se ejecuta en Emulator con ICS 4.0.3 (da los mismos resultados en HTC HD2):

RGBA_8888 ventana RGBA_8888 (32 bits), varios formatos de decodificación de mapa de bits: Formato de ventana de 32 bits

RGB_565 de ventana RGB_565 (16 bits), varios formatos de decodificación de mapa de bits: Formato de ventana de 16 bits

Se pueden notar varias cosas:

  • Dithering bandera no se tiene en cuenta de vez en cuando;
  • El formato de ventana predeterminado para ICS parece RGB_565 ;
  • El único gradiente de buena apariencia aparece con formato de ventana RGBA_8888 y formato de decodificación de mapa de bits RGBA_8888 .

Este problema también se ha informado en estas preguntas, pero todavía no se puede encontrar ninguna solución allí:

Problema de compatibilidad de degradado: ICS adopta por defecto menos colores que todas las versiones anteriores de Android

Awful calidad de imagen de fondo en Android

¿Cómo tratar todos estos formatos en ICS, para ser más preciso, cómo hacer mapas de bits de carga de ICS con formato RGBA_8888 y cómo configurar el formato de ventana a RGBA_8888 para que estos mapas de bits se muestren correctamente?

Definitivamente puedo asegurar que el formato de ventana predeterminada es RGB888. Esto fue hecho por defecto en Android 2.3, y no ha sido cambiado desde entonces. En este punto me gustaría considerar RGB565 ventanas obsoletas, ya que básicamente todos los dispositivos actuales tienen pantallas 32bpp.

Usted dice que también se está ejecutando esto en el HTC HD2, pero ya que no hay compilación oficial para que sería sospechoso de cualquier resultado que se llega allí.

Creo que el emulador todavía puede utilizar pantallas 16bpp, por lo que en esta área no confiaría en sus resultados para que coincida exactamente con lo que normalmente se verá en los dispositivos.

Esa aplicación de demostración es un poco extraño … tiene dos actividades que filtran la intención del lanzador, una destinada a 16bpp y otra a 32bpp. No estoy seguro de qué determina cuál es elegido cuando se inicia la aplicación.

Ejecutar la aplicación tal y como está en un dispositivo ICS (un Nexus S en ejecución 4.0.3) da como resultado que se elija la versión 16bpp. Si elimina la declaración de actividad 16bpp del manifiesto, no sorprende que lance la versión 32bpp en su lugar. Que me parece bien. La opción 'dither' no tiene efecto en 32bpp, pero eso es lo que se espera … el dithering solo entra en juego cuando la profundidad de la superficie de visualización es menor que la profundidad de la imagen.

En cuanto a las profundidades de la superficie de visualización, mi entendimiento es que la profundidad de la superficie de la ventana se utiliza por defecto a 16bpp, hasta Android 3.0 (Honeycomb) en que punto por defecto silenciosamente cambió a 32bpp. El valor predeterminado siempre se ha sobreescrito mediante Window.setFormat() .

  • Android 4 botones de software en el emulador?
  • Android Studio: Ice Cream Sandwich (API Nivel 15) La configuración del dispositivo no aparece aunque la imagen del sistema esté instalada
  • Cómo deshabilitar / ocultar el indicador de tres puntos (indicador de menú opcional) en los teléfonos ICS
  • MediaButtonIntentReceiver no funciona en Android 4.0+
  • Autocompletar TextView con Asynctask y webservice en android 4
  • Cómo cambiar el color de texto del conmutador en Android
  • Flujo de problemas de audio en ICS
  • ¿Cómo mantener expandido SearchView en el lado derecho de ActionBar (mientras se utiliza el icono personalizado)?
  • ImageView no escala en dispositivos de pantalla grande
  • Android 4.0, el texto en la barra de acción NUNCA muestra
  • Error al buscar la ventana - comportamientos diferentes desde la misma aplicación en el nexo de 2 galaxias
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.