2012-03-21 20 views
13

Su emulatori con sistema operativo Android 4.0 o 4.0.3, sto vedendo strisce di colori orribili di cui non riesco a liberarmi. Su tutte le altre versioni di Android che ho provato, le sfumature appaiono fluide.Strisce di colore solo su Android 4.0+

Ho un SurfaceView che è configurato come RGBX_8888 e il banding non è presente nella tela renderizzata. Se eseguo manualmente il dithering dell'immagine sovrapponendo un pattern di rumore alla fine del rendering, posso rendere nuovamente sfumate le sfumature, anche se ovviamente a un costo per le prestazioni che preferisco evitare.

Quindi la banda viene introdotta in seguito. Posso solo supporre che, in 4.0+, il mio SurfaceView venga quantizzato ad una profondità di bit inferiore ad un certo punto tra il suo essere disegnato e visualizzato, e posso vedere da una schermata che i gradienti stanno facendo un passo di 8 valori alla volta in ciascun canale, suggerendo una quantizzazione a 555 (non 565).

Ho aggiunto quanto segue alla mia funzione Activity onCreate, ma non ha fatto alcuna differenza.

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

Ho anche provato a mettere il suddetto in onAttachedToWindow() invece, ma non vi era ancora nessun cambiamento.

(credo che RGBA_8888 è il formato della finestra di default comunque per 2.2 e superiori, quindi è piccola sorpresa che l'impostazione in modo esplicito che il formato non ha alcun effetto sulla 4.0+.)

che lascia la questione, se la sorgente è 8888 e la destinazione è 8888, che cosa sta introducendo la quantizzazione/banding e perché appare solo su 4.0+?

Molto sconcertante. Mi chiedo se qualcuno può far luce?

+1

possibile duplicato di [Bitmap su ICS caricati con formato pixel errato] (http://stackoverflow.com/questions/9097887/bitmaps-on-ics-are-loaded-with-wrong-pixel-format) –

+0

Grazie per quel collegamento ... sembra davvero lo stesso problema. Alcune risposte suggeriscono che potrebbe essere semplicemente un problema di emulazione e, anche se non c'è una risposta definitiva, ho intenzione di andare con quello per ora. – threeshinyapples

+0

Sto avendo lo stesso identico problema. Sono stato in grado di rimuovere il problema su v2.2 + e v2.3 +, ma non v4.0 + mi piacerebbe sapere se qualcuno conosce una soluzione a questo? – Sent1nel

risposta

2

Prova 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

Accensione del emulatore "GPU Usa Host" opzione fissato i problemi di colore per me, il merito va a questa risposta https://stackoverflow.com/a/17166234/1287459

Nel mio caso ho usato Android 4.2 .2.

+0

un avvertimento: le schermate non funzionano quando si utilizza "GPU host" (escono in nero) –

+0

Ha funzionato nel mio caso ... Lo stavo facendo in modo da ottenere alcuni screenshot validi per Google Play. – Georgie