2011-02-07 22 views
6

Me he encontrado con problemas de bandas de mis archivos PNG. Profundizar en el problema ha producido dos soluciones. Ambos tienen sentido individualmente, pero juntos no tienen sentido. Las soluciones que he descubierto:Confundiendo soluciones de bandas PNG

1) Mueva el archivo PNG a la carpeta "raw". Esto evita que AAPT "optimice" la imagen, lo que produce bandas.

2) Cambie el formato de píxeles de la ventana de su actividad a RGBA_8888 (es decir, en onCreate agregue esta línea "getWindow(). SetFormat (PixelFormat.RGBA_8888)"). En Android 2.2 y versiones inferiores, el formato de píxeles predeterminado es de 16 bits (565).

He intentado ambas cosas y corrigen el efecto de bandas en mis imágenes, sin embargo, ahora estoy aún más confundido sobre lo que está haciendo Android.

Por un lado, si dejo mi PNG en la carpeta dibujable, se "optimiza", lo que da como resultado un efecto de banda en la imagen. Desaparece mágicamente cuando cambio el formato de píxeles a 32 bits. Sin embargo, si la imagen estaba "optimizada", hubiera esperado que las bandas permanecieran.

Por otro lado, si muevo el archivo PNG a la carpeta sin formato, conservará el buen degradado y se mostrará muy bien, aunque el formato del píxel sea supuestamente de 16 bits.

Si alguien tiene alguna idea de lo que está pasando, se lo agradecería.

Gracias,

-Dan

Respuesta

8

creo que es bastante simple:

Tienes que pensar en el formato de píxel de su actividad (RGBA_8888) como una optimización por defecto para sus mapas de bits.

Si no está configurado, entonces, antes de 2.2, de forma predeterminada comprimirá su mapa de bits a RGB_565.

Pero si creara programáticamente un mapa de bits y lo configurara en RGBA_8888, la aplicación lo utilizaría como tal.

Lo mismo se aplica cuando coloca el mapa de bits en la carpeta RAW: aunque el valor predeterminado de PixelFormat sea RGB_565, la actividad lo usará como está sin "optimizarlo".

Cuando coloca su mapa de bits en la carpeta sin formato, no se comprimirá y se utilizará como está aunque el PixelFormat predeterminado siga siendo RGB_565.

+1

Ah, entonces el dispositivo * es * capaz de mostrar color de 32 bits, pero la Actividad está configurada para usar solo 16 bits antes que 2.3 si estoy leyendo su respuesta correctamente. – Dan

+0

Casi: "pero la actividad está configurada para usar 16 bits como valor predeterminado antes de 2.3". Decir "SOLAMENTE" significaría que no es capaz de administrar tanto 16 como 32 bits al mismo tiempo, pero en realidad sí lo está. – Yahel

+0

Bien, gracias por su respuesta. Creo que lo entiendo ahora. – Dan