OutOfMemoryError in BitmapFactory.decodeFile ()

When I select an image from the gallery, if the image size is more than 3 MB, and you can disable OutOfMemoryError.

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

This text is from magazines. Please help me because the "deadline")

 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) 
+6
source share
3 answers

OutofMemory occurs when your application exceeds the memory allocated in the heap. The bitmap is too large to fit in memory, i.e. heaps. In this case, you do not have enough memory. You need to scale the bitmap and then use it.

To do this, check this link.

try this code can help you

  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; } 
+23
source
 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 8; Bitmap bm = BitmapFactory.decodeFile(path,options); 
+7
source

Try this.

 BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inDither=false; //Disable Dithering mode bmOptions.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared bmOptions.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future bmOptions.inTempStorage=new byte[32 * 1024]; Bitmap mainBitmap = BitmapFactory.decodeFile(filePath, bmOptions); 
+1
source

Source: https://habr.com/ru/post/1205088/


All Articles