Итак, у меня есть Uri изображения, которое пользователь выбирает из изображений с его SD-карты. И я хотел бы отобразить миниатюру этого изображения, потому что, очевидно, изображение может быть огромным и охватывать весь экран. Кто-нибудь знает как?Android: Получить снимок изображения на SD-карте, учитывая Uri оригинального изображения
ответ
Этот код будет делать работу:
Bitmap getPreview(URI uri) {
File image = new File(uri);
BitmapFactory.Options bounds = new BitmapFactory.Options();
bounds.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image.getPath(), bounds);
if ((bounds.outWidth == -1) || (bounds.outHeight == -1))
return null;
int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight
: bounds.outWidth;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = originalSize/THUMBNAIL_SIZE;
return BitmapFactory.decodeFile(image.getPath(), opts);
}
Вы можете рассчитать ближайший мощность 2 использовать для inSampleSize
, потому что it's said быстрее.
Я считаю, что этот кодом является самым быстрым способом для создания миниатюры из файла на SD-карте:
public static Bitmap decodeFile(String file, int size) {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file, o);
//Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = (int)Maths.pow(2, (double)(scale-1));
while (true) {
if (width_tmp/2 < size || height_tmp/2 < size) {
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale++;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeFile(file, o2);
}
Destil: ваш вес недооценивается, это 2 (шкала-1). В Java: (int) Maths.pow (2, (double) (scale-1)) –
Спасибо! Ред. –
Я думаю, что вы нарушили этот код в своем редактировании, он использует масштаб в своем собственном задании. Также нет такого пакета, как «Maths». –
Вы можете просто создать видео миниатюр и изображения с помощью ThumnailUtil класса Явы
Bitmap resized = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(file.getPath()), width, height);
public static Bitmap createVideoThumbnail (String filePath, int kind)
Добавлены в API level 8 Создайте видеоролик для видео. Может возвращать null, если видео повреждено или формат не поддерживается.
Параметры Filepath путь видеофайла вида может быть MINI_KIND или MICRO_KIND
Несколько попыток я не мог получить путь миниатюрного изображения с SD. Я решил эту проблему получить растровое изображение изображения Android, прежде чем создать представление изображения в адаптере для gridview (или где вам нужно). Так я называю метод imageView.setImageBitmap(someMethod(Context context, imageID))
Bitmap someMethod(Context context, long imageId){
Bitmap bitmap = Media.Images.Thumbnails.getThumbnail(context.getAplicationContext.getContentResolver(), imageid, MediaStore.Images.Thumbnails.MINI_KIND, null);
return bitmap;
}
Вы можете получить ID изображения из вашей SD с помощью данного руководства (Get list of photo galleries on Android)
Если вам нравится HQ миниатюр, поэтому используйте [RapidDecoder] [1] библиотека. Это просто следующим образом:
import rapid.decoder.BitmapDecoder;
...
Bitmap bitmap = BitmapDecoder.from(getResources(), R.drawable.image)
.scale(width, height)
.useBuiltInDecoder(true)
.decode();
Не забывайте использовать встроенный декодер, если вы хотите масштабировать до менее чем 50% и результат HQ. я тестировал в уровне API 8 :)
что такое THUMBNAIL SIZE –
Конструктор File (Uri) не определено – hasanghaforian
степень 2 для inSampleSize не быстрее, но требуется алгоритмом. Обратите внимание, что изображения могут быть намного моложе, чем THUMBNAIL_SIZE, потому что, если, например, 'inSampleSize = originalSize/THUMBNAIL_SIZE' равно 7,' inSampleSize' будет округлено до 4, что даст вам размер оригиналаSize/4, что в 1,75 раза больше вашего размера ожидайте за измерение, т. е. в 3 раза больше пикселей. Этот эффект быстро увеличивается для больших размеров выборки. –