2016-04-21 2 views
0

Я новичок в программировании на Android. Я пытался отобразить изображение с SD-карты моего устройства на ImageView, используя BitmapFactory.decodeFile(imagePath). Я могу читать изображение с SD-карты, а затем official documentation to loading bitmaps efficiently. Хотя одна вещь, которую я не могу понять, - это то, почему возвращенный битмап намного больше размера, чем оригинальный размер? Исходный размер изображения был 84.32 kb, растровое изображение, которое я получил, было размером 4.096 mb. Я пытался загрузить растровое изображение с высотой и шириной изображения, то есть 1280x800. Если я уменьшу ширину и высоту изображения в приведенном ниже методе, я получаю уменьшенный размер. Но почему я не могу загрузить изображение в растровое изображение с его первоначальным размером и фактической шириной и высотой?BitmapFactory.decodeFile возвращает изображение с большим размером, чем оригинал

Метод decodeSampledBitmap():

public static Bitmap decodeSampledBitmap(String path, 
                int reqWidth, int reqHeight) { 

    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    //BitmapFactory.decodeResource(res, resId, options); 
    BitmapFactory.decodeFile(path, options); 

    // Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    //return BitmapFactory.decodeResource(res, resId, options); 

    return BitmapFactory.decodeFile(path, options); 
} 
+0

"Размер оригинального изображения был 84.32 kb" - как вы это определяете? Например, это размер изображения на диске? «растровое изображение, которое я получил, имеет размер 4.096 мб» - как вы это определяете? – CommonsWare

+0

да размер на диске был 84.32 kb, а размер растрового изображения, который я получил, был с помощью метода bitmap.getByteCount(). –

ответ

1

Размер изображения на диске имеет мало общие с размером изображения в памяти. Изображения PNG, JPEG и GIF сжимаются на диске. В памяти они несжаты.

+0

Итак, чтобы получить растровое изображение разумного размера, мне нужно уменьшить его ширину и высоту? Затем как разместить его в изображении, которое занимает 50% экрана (например,)? Если я установил ширину и высоту изображения, то он растянет растровое изображение. –

+1

Используйте «scaleType» для ImageView. – sonngaytho

+1

@ user3052023: Um, «50% экрана» редко будет соответствовать исходным размерам изображения. Кроме того, имейте в виду, что существует несколько тысяч моделей устройств Android с различными разрешениями экрана. Следовательно, у вас будет такая же проблема, даже если вы должны загрузить изображение с помощью 'inSampleSize'' 1'. Как отмечает sonngaytho, используйте 'android: scaleType' на вашем« ImageView », чтобы контролировать, как изображение загружается в него, когда размеры изображения и размеры« ImageView »не совпадают. – CommonsWare

Смежные вопросы