2012-03-21 12 views
13

En los emuladores con Android 4.0 o 4.0.3, veo bandas de color horribles de las que parece que no puedo deshacerme. En cada otra versión de Android que he probado, los degradados se ven sin problemas.Color de bandas únicamente en Android 4.0+

Tengo un SurfaceView que está configurado como RGBX_8888, y el anillado no está presente en el lienzo renderizado. Si alterno manualmente la imagen superponiendo un patrón de ruido al final del renderizado, puedo suavizar los degradados nuevamente, aunque obviamente a un costo de rendimiento que prefiero evitar.

Por lo tanto, las bandas se introducirán más adelante. Solo puedo suponer que, en 4.0+, mi SurfaceView se está cuantificando a una profundidad de bit menor en algún momento entre su dibujado y su visualización, y puedo ver en una captura de pantalla que los gradientes están subiendo 8 valores a la vez en cada canal, sugiriendo una cuantificación a 555 (no a 565).

Agregué lo siguiente a mi función onCreate Activity, pero no hizo ninguna diferencia.

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

También intenté poner lo anterior en onAttachedToWindow() en su lugar, pero aún había ningún cambio.

(creo que RGBA_8888 es el formato de ventanas por defecto de todos modos por 2,2 y por encima, por lo que es poco sorprendente que establecer explícitamente ese formato no tiene efecto sobre 4.0+.)

que sale de la pregunta, si la fuente es 8888 y el destino es 8888, ¿qué está introduciendo la cuantización/bandas y por qué solo aparece en 4.0+?

Muy desconcertante. Me pregunto si alguien puede arrojar algo de luz?

+1

posible duplicado de [Bitmaps en ICS se cargan con formato de píxeles incorrecto] (http://stackoverflow.com/questions/9097887/bitmaps-on-ics-are-loaded-with-wrong-pixel-format) –

+0

Gracias para ese enlace ... de hecho parece el mismo problema. Algunas respuestas sugieren que puede tratarse simplemente de un problema de emulador y, aunque no hay una respuesta definitiva, voy a aceptar eso por ahora. – threeshinyapples

+0

Estoy teniendo exactamente el mismo problema. Pude eliminar el problema en v2.2 + y v2.3 +, pero no en v4.0 + Me encantaría saber si alguien conoce una solución para esto. – Sent1nel

Respuesta

2

Trate dis ..

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options); 

findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient)); 
0

Encendido del emulador "GPU utiliza Host" opción fija los problemas de color para mí, el crédito va a esta respuesta https://stackoverflow.com/a/17166234/1287459

En mi caso yo estaba usando Android 4.2 .2.

+0

una advertencia: las capturas de pantalla no funcionan cuando se usa "Host GPU" (salen en negro) –

+0

Funcionó en mi caso ... Estaba haciendo esto para poder obtener buenas capturas de pantalla para Google Play. – Georgie

Cuestiones relacionadas