2011-12-03 13 views
9

Ho una situazione curiosa: dopo aver spostato i miei PNG da/drawable-hdpi/a/drawable/e inserendo bitmap XML in/drawable-hdpi/invece, non posso decodificare questi bitmap con il metodo BitmapFactory.decodeResource() - restituisce null. Che cosa è sconosciuto è che:android decodeResource restituisce null per bitmap xml - Livello API 7

  1. posso decodificare effettiva del file PNG con questo metodo (che dà l'id drawable reale)
  2. posso ottenere il disegnabili utilizzando context.getResources().getDrawable(xml_id)-
  3. Tutti ImageViews componenti vengono decodificati correttamente (. ma questo è a causa di p 2 suppongo)

Quello che vedo nel logcat è:

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

quindi vorrei fare una congettura selvaggia che al decodificatore viene dato il file xml da decodificare invece della risorsa reale (che ho controllato è valido).

Eventuali suggerimenti? È possibile BitmapFactory.decodeResource() con la bitmap xml? Btw, sto usando l'API 7.

E ho anche provato a mettere i lpng in nodpi disegnabili, ma non è stato d'aiuto. grazie

risposta

-1

Che cosa è una bitmap XML nel mondo? BitmapFactory.decodeResource() carica un'immagine bitmap: è necessario utilizzare un'immagine PNG o JPEG con essa, nient'altro.

E si prega di smettere di buttare roba a caso in -hdpi e -nodpi o altro. Per un determinato nome di risorsa, tutti i diversi qualificatori di dpi o whatnot forniscono diverse varianti sulla stessa cosa. Non dovresti avere alcuni di essi bitmap e alcuni di essi file XML, né ha senso mescolare -nodpi con altre varianti.

+2

beh, forse ho usato un'espressione non corretta, cosa significava ** alias ID risorsa in XML ** vedi: [collegamento] http://developer.android.com/guide/topics/resources/drawable- resource.html # Bitmap. –

+1

ok ho capito, decodeResource() non ha una logica che controlla se la risorsa è PNG o un alias, semplicemente decodifica, peccato. –

1

Una bitmap XML è una risorsa definita in XML che punta a un file bitmap. L'effetto è un alias per un file bitmap non elaborato. L'XML può specificare proprietà aggiuntive per la bitmap come dithering e tiling.

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

Sto avendo lo stesso problema ma io uso questo come una soluzione alternativa. Sfortunatamente con questo metodo non vedo alcun modo per passare Opzioni quando decodificate il flusso.

  //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

Prendi il drawable e poi convertire in bitmap:

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

Ora è possibile utilizzare l'oggetto bitmap.

+0

Questo ha risolto questo problema per me! –

+2

Viene visualizzato un messaggio di errore: 'android.graphics.drawable.StateListDrawable non può essere lanciato su android.graphics.drawable.BitmapDrawable' –

+0

' getDrawable (resId) 'è stato dichiarato obsoleto. Usa invece 'ContextCompat.getDrawable (context, resId)'. – Jeffrey

0

Questo errore accures anche quando si cerca di collegare un bitmap XML ad un altro bitmap xml come questo

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

dove "glow" è un altro bitmap xml.

Problemi correlati