2011-12-03 24 views
9

Tengo una situación curiosa: después de mover mis PNG de/drawable-hdpi/a/drawable/y poner XML bitmaps en/drawable-hdpi/en su lugar, no puedo decodificar estos mapas de bits con el método BitmapFactory.decodeResource() - vuelve null. Lo que es extraño es que:android decodeResource devuelve null para xml bitmap - API nivel 7

  1. que puede decodificar real del archivo PNG con este método (que da el id dibujable real)
  2. puedo conseguir el dibujable utilizando context.getResources().getDrawable(xml_id) -
  3. componentes Todos ImageViews se decodifican correctamente (., pero eso es debido a la p 2 supongo)

lo que veo en el logcat es:

12-03 16:18:13.557: D/skia(2566): --- SkImageDecoder::Factory returned null
12-03 16:18:13.557: D/skia(2566): --- SkImageDecoder::Factory returned null
12-03 16:18:13.567: D/skia(2566): --- SkImageDecoder::Factory returned null

así que tomaría una suposición de que el decodificador recibe el archivo XML para decodificar en lugar del recurso real (que he comprobado es válido).

¿Alguna pista? ¿Es posible BitmapFactory.decodeResource() con el mapa de bits xml? Por cierto, estoy usando API 7.

Y también he tratado de poner las lpngs Origina en dibujable-nodpi pero eso no ayuda tampoco. gracias

Respuesta

-1

Lo que en el mundo es un mapa de bits XML? BitmapFactory.decodeResource() carga una imagen de mapa de bits; debe usar una imagen PNG o JPEG con ella, nada más.

Y por favor dejar de tirar cosas al azar a -hdpi y -nodpi o lo que sea. Para un nombre de recurso dado, todos los diferentes calificadores de dpi o lo que sea proporcionan diferentes variaciones en la misma cosa. No debería tener algunos de ellos como bitmaps y algunos de ellos archivos XML, ni tiene sentido mezclar -nodpi con otras variaciones.

+2

Bueno, tal vez he usado una expresión incorrecta, lo que significaba que era ** ID de recursos de alias en XML ** ver: [link] http://developer.android.com/guide/topics/resources/drawable- resource.html # Bitmap. –

+1

ok lo entiendo, decodeResource() no tiene lógica que compruebe si el recurso es PNG o un alias, simplemente decodifica, lástima. –

1

Un mapa de bits XML es un recurso definido en XML que apunta a un archivo de mapa de bits. El efecto es un alias para un archivo de mapa de bits sin formato. El XML puede especificar propiedades adicionales para el mapa de bits, como el difuminado y el mosaico.

http://developer.android.com/guide/topics/resources/drawable-resource.html

estoy teniendo el mismo problema pero yo uso esto como una solución. Desgraciadamente con este método no veo ninguna forma de pasar Opciones cuando decodifica la transmisión.

  //init input stream 
    is = getContext().getResources().openRawResource(resID); 

    Bitmap returnBitmap; 

    //Load bitmap directly - will fail if xml 
    Bitmap newBmp = BitmapFactory.decodeStream(is, options); 
    if(newBmp == null){ 
     //Load bitmap from drawable auto scales 
     newBmp = ((BitmapDrawable) getContext().getResources().getDrawable(resID)).getBitmap(); 
    } 
8

Consigue el dibujable y luego convertir a mapa de bits:

Drawable drawable = getResources().getDrawable(resId); 
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 

Ahora se puede utilizar el objeto de mapa de bits.

+0

¡Esto resolvió este problema para mí! –

+2

Aparece un error: 'android.graphics.drawable.StateListDrawable no se puede convertir a android.graphics.drawable.BitmapDrawable' –

+0

' getDrawable (resId) 'ha quedado obsoleto. Use 'ContextCompat.getDrawable (context, resId)' en su lugar. – Jeffrey

0

Este error también accures al intentar vincular un mapa de bits XML a otro mapa de bits XML como esto

<bitmap 
    android:src="@drawable/glow" 
    android:tileMode="disabled" android:gravity="center" > 
</bitmap> 

donde "resplandor" es otro mapa de bits XML.