2013-03-03 10 views
9

Ho un'immagine con risoluzione 543 * 6423, voglio visualizzarla in tutti i dispositivi. Sta visualizzando in pochi telefoni Android che consente l'alta risoluzione. Ho provato conBitmap troppo grande per essere caricato in una trama in alcuni telefoni

android:hardwareAccelerated="false" 

Questo è il mio codice java.

File storagePath =Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOWNLOADS+ 
        "abc.png"); 
      InputStream is = this.getContentResolver().openInputStream(Uri.fromFile(storagePath)); 
      Bitmap b = BitmapFactory.decodeStream(is, null, null); 
      is.close(); 
      image.setImageBitmap(b); 

Questo ha funzionato nel mio cellulare (Sony Xperia) ma pochi altri telefoni non lo visualizzano. Per favore aiutami come posso visualizzare questa immagine indipendentemente dalla risoluzione dello schermo.

Grazie, Aman

+1

vedi [questa] risposta (http://stackoverflow.com/a/15136744/1289716), spero che ti possa aiutare. – MAC

+0

http://stackoverflow.com/questions/22633638/prevent-bitmap-too-large-to-be-uploaded-into-a-texture-android/24123605#24123605 Controlla la mia risposta – Gilbert92

risposta

4

La tua immagine è probabilmente troppo grande per essere visualizzato sulla maggior parte dei dispositivi. Quindi devi caricare una versione ridotta dell'immagine. Guarda Loading Large Bitmaps Efficiently per vedere come eseguire questa operazione e calcolare una dimensione campione appropriata. Se è necessaria la larghezza/altezza del display (nel caso di un'immagine a schermo intero) è possibile utilizzare getResources().getDisplayMetrics().

0

Beh, forse sono in ritardo per aiutarti ma questo può aiutare gli altri. Recentemente ho sviluppato una libreria open source in grado di gestire il caricamento di immagini di grandi dimensioni. Il codice sorgente ed i campioni sono disponibili presso https://github.com/diegocarloslima/ByakuGallery

0

La soluzione nel blog è sbagliato per una potenza di 2 ...

ecco la soluzione:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 

// Set height and width in options, does not return an image and no resource taken 
BitmapFactory.decodeStream(imagefile, null, options); 

int pow = 0; 
while (options.outHeight >> pow > reqHeight || options.outWidth >> pow > reqWidth) 
    pow += 1; 
options.inSampleSize = 1 << pow; 
options.inJustDecodeBounds = false; 
image = BitmapFactory.decodeStream(imagefile, null, options); 

L'immagine verrà ridimensionata alle dimensioni di reqHeight e reqWidth. Come capisco inSampleSize prendi solo una potenza di 2 valori.

3

provare con

android:hardwareAccelerated="false" 
android:largeHeap="true" 
0

Invece di spendere ore e ore cercando di scrivere ed eseguire il debug tutto questo codice downsampling manualmente, perché non provare a utilizzare Picasso? È una libreria di caricamento delle immagini molto diffusa ed è stata creata per gestire bitmap di tutti i tipi e/o dimensioni. Ho usato questa singola riga di codice per rimuovere la mia "bitmap troppo grande ...." problema:

Picasso.with(image.getContext()).load(storagePath).fit().centerCrop().into(image); 
Problemi correlati