2016-08-18 3 views
-1

У меня проблемы с изображениями в моей галерее, которые намного больше, чем мне нужно.Android выберите изображение из галереи и измените его размер до того, как я вытащил его в

Я искал способы уменьшить их размер, прежде чем на самом деле их втянуть, но я просто не совсем собираю его, поскольку большинство из того, что я нахожу, имеет дело с ресурсами BitMap, а не с BitMap, которое уже существует в галерее.

Так, в принципе, я получаю изображение, как это так,

imageBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 

Но прежде, чем я на самом деле назначить его на мой BITMAP вар там мне нужно масштабировать его до приемлемого размера для телефона.

Любая помощь с пониманием происходящего здесь лучше оценивается.

ответ

0

getBitmap() - слабый метод удобства. Его тело является колоссальной четырьмя строками кода:

public static final Bitmap getBitmap(ContentResolver cr, Uri url) 
     throws FileNotFoundException, IOException { 
    InputStream input = cr.openInputStream(url); 
    Bitmap bitmap = BitmapFactory.decodeStream(input); 
    input.close(); 
    return bitmap; 
} 

Вот почему я не удосужился учить людей об этом.

IMHO, лучшее решение для вас, чтобы использовать один из many image-loading libraries available for Android, такой как Picasso. Большинство хороших могут загружаться с Uri и обрабатывать изменение размера как часть операции, делая тяжелый подъем на фоне потока.

Если по какой-либо причине вы хотите сделать все, что работает самостоятельно, позвоните по телефону BitmapFactory.decodeStream() с объектом BitmapFactory.Options. В частности, установите inSampleSize, чтобы указать, что вы хотите, чтобы изображение было повторно сэмплировано как часть его считывания, поэтому вы заканчиваете с меньшим размером Bitmap, занимая меньше места кучи.

+0

О, человек .... это именно тот ответ, который я искал, потому что это заставило меня понять, что то, что я делаю, даже не нужно вообще работать с растровыми изображениями, я просто могу прямо использовать Uri. Это был маленький кусочек, который мне не хватало, и это произошло потому, что я вырвал код someones, который использовал метод getBitmap, не понимая, что он делает. Спасибо! – BrandenS