ورود

View Full Version : حداکثر اندازه فایل برای ساختن bitmap ?



reza_azizi2010
پنج شنبه 03 بهمن 1392, 17:53 عصر
سلام

من وقتی میخام یک عکس رو از پوشه assets بصورت bitmap درستش کنم و داخل یک imageview نمایش بدم پیغام خطای زیر میاد :

01-23 18:28:21.578: E/AndroidRuntime(693): java.lang.OutOfMemoryError

وقتی از یه عکس کم حجمتر استفاده کردم مشکل رفع شد، میخاستم بدونم حجم عکس حداکثر چقدر باید باشه؟ عکس من کمتر از 150کیلوبات بود.
نمیشه کاری کرد عکسهای بزرگ رو هم هندل کنه؟

shahin bahari
پنج شنبه 03 بهمن 1392, 20:21 عصر
حجم عکس به صورت فشرده 150 کیلو بوده ولی وقتی Bitmap بشه میشه طول*عرض *4 بایت که ممکن از حجم قابل دسترسی برنامه (16 یا 32 مگ یا بیشتر) باشه.
برای باز کردن این عکس ها معمولا شما نیاز به کل عکس ندارید و کل عکس اصلا تو صفحه جا نمیشه برای همین با BitmapFactory و تنظیم option ها اون رو به طور کوچکتر باز کنید:
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inJustDecodeBounds = true;
BitmapFactory.decodeFile(lst.get(counter), opt);
opt.inSampleSize = calculateInSampleSize(opt);
opt.inJustDecodeBounds = false;
opt.inPreferredConfig = Bitmap.Config.RGB_565;
iv.setImageBitmap(BitmapFactory.decodeFile(lst.get (counter), opt));

private int calculateInSampleSize(BitmapFactory.Options options) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > thumbnailY || width > thumbnailX) {
inSampleSize = (int) Math.pow(
2,
(int) (Math.log(Math.min((float) thumbnailY
/ (float) height, (float) thumbnailX
/ (float) width)) / Math.log(0.5)));
}
return inSampleSize;
}
}