user960971
user960971

Reputation: 123

Loading big image to bitmap in android

Hi i am using below code to load images from sdcard, it is running correctly,

Bitmap picture=BitmapFactory.decodeFile("/sdcard...");

or

Bitmap picture= BitmapFactory.decodeByteArray(byte[]..);  

The byte[] array contains bytes read from sdcard by using FileInputstream and is not null. Both of above codes work fine. The problem is that they dont work for images that are larger e.g. i have an image of 1.8 mb in size. My app crashes while decoding the image. Any method used for larges image fails. Any solution plz thakns.

Upvotes: 3

Views: 5954

Answers (4)

David
David

Reputation: 1718

The tutorial at http://developer.android.com/training/displaying-bitmaps/load-bitmap.html explains how to load large images into a Bitmap without encountering the dreaded OutOfMemoryException.

Upvotes: 2

Deepak
Deepak

Reputation: 1141

The Android VM has memory limitation which limits the size of the images decodable. To display the resixed images in an image view the following code could be used.

decode_options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(temp,decode_options);  //This will just fill the output parameters
if(decode_options.outWidth > image_width
        || decode_options.outHeight > image_height)
{
    float scale_width,scale_height;

    scale_width = ((float)decode_options.outWidth) / image_width;
    scale_param = scale_width;
    scale_height = ((float)decode_options.outHeight) / image_height;

    if(scale_param < scale_height)
        scale_param = scale_height;
}

decode_options.inJustDecodeBounds = false;
decode_options.inSampleSize  = (int)(scale_param + 1);
decode_options.inPreferredConfig =  Bitmap.Config.ARGB_8888;
decoded_data = 
        BitmapFactory.decodeFile(temp,decode_options);

Upvotes: 1

Aram
Aram

Reputation: 695

Try to create purgeable Bitmap.

   byte[] data = ...(read byte array from file)
   BitmapFactory.Options opt = new BitmapFactory.Options();
   opt.inPurgeable = true;
   Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length, opt); 

Upvotes: 6

Senthil Mg
Senthil Mg

Reputation: 3313

Use the below code to resize the image any size you need..

 Bitmap picture=BitmapFactory.decodeFile("/sdcard...");
    int width = picture.getWidth();
    int height = picture.getWidth();
    float aspectRatio = (float) width / (float) height;
    int newWidth = 70;
    int newHeight = (int) (70 / aspectRatio);       
    picture= Bitmap.createScaledBitmap(picture, newWidth, newHeight, true);

Upvotes: 3

Related Questions