how to correct this error: java.lang.OutOfMemoryError

13,466

ost of times this happens due to large bitmap cross the limit of VM heap, so you need to scale down your image or to lower the quality of you image.

To scale image use BitmapFactory.Options.

Bitmap bm = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
AssetFileDescriptor fileDescriptor =null;
try {
    fileDescriptor = this.getContentResolver().openAssetFileDescriptor(selectedImage,”r”);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
finally{
    try {
        bm = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
        fileDescriptor.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
} 

Or use Bitmap.compress() to lower quality of image.

And you can also follow this conversation to avoid memory error while loading images in Bitmap.

Share:
13,466
Kaic_supra
Author by

Kaic_supra

Updated on June 15, 2022

Comments

  • Kaic_supra
    Kaic_supra about 2 years

    This is my code:

    public void onPictureTaken(byte[] data, Camera camera) {
        Bitmap foto = BitmapFactory.decodeByteArray(data, 0, data.length);
        wid = foto.getWidth();
        hgt = foto.getHeight();
    
        Bitmap newImage = Bitmap.createBitmap(wid, hgt, Bitmap.Config.ARGB_4444);
        Canvas canvas = new Canvas(newImage);
        canvas.drawBitmap(foto, 0f, 0f, null);
        if (newImage.getWidth() > newImage.getHeight()) {
            Matrix matrix = new Matrix();
            matrix.postRotate(90);
            newImage.createBitmap(newImage, 0, 0, wid, hgt, matrix, true);
    
        }
    }
    

    This is my error:

    FATAL EXCEPTION: main
    java.lang.OutOfMemoryError
    at android.graphics.Bitmap.nativeCreate(Native Method)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:689)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:666)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:633)
    at com.supratecnologia.activity.Camera_Activity.onPictureTaken(Camera_Activity.java:189)
    at android.hardware.Camera$EventHandler.handleMessage(Camera.java:768)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)