Reputation: 123
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
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
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
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
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