2014-10-20 12 views
5

Quando seleziono l'immagine dalla galleria se le dimensioni delle immagini sono superiori a 3 Mb android l'OutOfMemoryError.OutOfMemoryError in BitmapFactory.decodeFile()

BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, options); 

Questo testo dai registri. Please help me, siccome "scadenza")

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.OutOfMemoryError 
     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 
     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:378) 
     at com.DriverNotes.AndroidMobileClientTest.ProfileActivity.onActivityResult(ProfileActivity.java:104) 
     at android.app.Activity.dispatchActivityResult(Activity.java:5456) 
     at android.app.ActivityThread.deliverResults(ActivityThread.java:3402) 
     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3449) 
     at android.app.ActivityThread.access$1200(ActivityThread.java:150) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1328) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
+1

dovete scalare l'immagine in un primo momento. –

+0

Scrivi il tuo commento come risposta e se questo metodo funziona, controllo la tua risposta come rigo – Artem

risposta

22

OutofMemory si verifica quando la vostra applicazione supera memoria allocata in mucchio. La bitmap è troppo grande per adattarsi alla memoria, ad esempio heap. In tal caso hai esaurito la memoria. È necessario ridimensionare la bitmap e quindi utilizzare la stessa.

For that check the link below

provare questo codice può aiutare,

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){ 
try { 
    //Decode image size 
    BitmapFactory.Options o = new BitmapFactory.Options(); 
    o.inJustDecodeBounds = true; 
    BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

    //The new size we want to scale to 
    final int REQUIRED_WIDTH=WIDTH; 
    final int REQUIRED_HIGHT=HIGHT; 
    //Find the correct scale value. It should be the power of 2. 
    int scale=1; 
    while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT) 
     scale*=2; 

    //Decode with inSampleSize 
    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o2.inSampleSize=scale; 
    return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
} catch (FileNotFoundException e) {} 
return null; 
} 
+0

final int REQUIRED_WIDTH = WIDTH; final int REQUIRED_HIGHT = HIGHT; È necessario? –

4
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 8; 
Bitmap bm = BitmapFactory.decodeFile(path,options); 
Problemi correlati