2011-03-22 24 views
9

Al tratar con algunos mapas de bits en Android, noté que el blanco utilizado en las vistas no siempre es el mismo blanco representado en mapas de bits. Considera esta captura de pantalla.Blanco no es blanco

enter image description here

blanco El fondo es de una vista con color de fondo blanco.

El primer plano "blanco" es de un mapa de bits blanco decodificado de la tarjeta SD, que se muestra en un ImageView. Este mapa de bits se decodifica utilizando RGB_565 como sigue:

BitmapFactory.Options resample = new BitmapFactory.Options(); 
resample.inPreferredConfig = Config.RGB_565; 
resample.inSampleSize = sampleSize; 
return BitmapFactory.decodeFile(filePath, resample); 

Para referencia, here 's el mapa de bits.

¿Por qué es esto y cómo se puede solucionar?

+1

¿Cuál es el mapa de bits necesarios blanco? Podría haber usado un montón de líneas vacías: P – Marlon

+1

Pero entonces: ¿por qué tanto tiempo, o por qué no solo un enlace? – Arjan

+0

Vinculado al mapa de bits en lugar de adjuntarlo a la pregunta. – hpique

Respuesta

0

Puede ser una diferencia entre el tipo de imagen y el mapa de bits en el que está renderizando ImageView, consulte Bitmap.Config. Cargue su imagen en diferentes modos y vea si eso ayuda. Eche un vistazo a Bitmap quality and banding para más información.

+0

¿Puedes elaborar un poco más? Agregué el Bitmap.Config que estoy usando (RGB_565). – hpique

+0

Intenta configurar la ventana y la imagen para usar el mismo modo RGB y ver qué pasa. Establezca la imagen como se muestra arriba y la ventana con 'getWindow(). GetAttributes(). Format'. Pruebe RGB_8888 y vea si no es blanco. ¿Sabes en qué formato RGB está tu imagen original? –

+0

No. ¿Cómo puedo verificar el formato RGB de la imagen (que está vinculado en la pregunta, por cierto)? Sé que es RGB y la profundidad es 8, según Mac OS X Preview. – hpique

3

Tengo el mismo problema y después de algunos experimentos noté que comentar <uses-sdk> resuelve el problema. Cualquier valor por encima de 3 android:minSdkVersion hará aparecer este efecto (eliminación <uses-sdk> etiqueta cambia de manera efectiva a minSdkVersion 1.

+0

lamentablemente esto no funcionó para mí. – radhoo

+0

Esto funcionó para mí, pero esto arruina los diseños de la tableta – VicVu

1

tenía una muy similar, si no exactamente el mismo problema, incluso la creación de inPreferredConfig a ARGB_8888 no ayudó.

De de lo que puedo extraer: http://android.nakatome.net/2010/04/bitmap-basics.html

el problema es que Android oscila automáticamente las imágenes de 24 bits de hasta 16 bits, lo que puede interferir con los colores. El enlace menciona que puedes desactivar esto agregando un canal alfa a tu imagen, o cargarlo desde el directorio sin formato en lugar de como un recurso.

visto ya que ninguno de ellos eran una opción para mí He encontrado el siguiente fin trabajado:

Paint ditherPaint = new Paint(); 
ditherPaint.setDither(true); 
canvas.drawBitmap(mDrawable.getBitmap(), null, 
        mDrawable.getBounds(), ditherPaint); 

Aquí mDrawable es de tipo BitmapDrawable.

0

Esto es lo que resuelve esto para mí:

Es necesario que ajuste la densidad de pantalla para evitar que la fábrica de mapa de bits de reescalar el mapa de bits. Esto se realiza con el siguiente código:

DisplayMetrics displayMetrics=new DisplayMetrics(); 
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
resample.inScreenDensity = displayMetrics.densityDpi; 
+0

¿Qué son las opciones? – VicVu

+1

Lo sentimos, esto debería volver a muestrearse como en la pregunta original. Es una instancia de BitmapFactory.Options que luego se usa como parámetro para BitmapFactory.decode * -method. – ChristophK

2

intente configurar getWindow().setFormat(PixelFormat.RGB_565) en su onCreate.

El formato por defecto parece cambiar dependiendo de la versión del SDK y el tipo de dispositivo, por lo que sólo obligarlo a permanecer en RGB_565