У меня есть объект URI который содержит в себе адрес загружаемого изображения. Мне надо получить изображение и изменить его размер.
Есть объект полученный как входной параметр
private final Uri mUri;
public LoadEditSaveImageTask(Uri uri) {
this.mUri = uri;
}
Создаю новый объект c options:
BitmapFactory.Options optionsBitmap = new BitmapFactory.Options();
optionsBitmap.inJustDecodeBounds = true;
Дальше открываю поток:
FileInputStream fis = (FileInputStream)
mContext.getContentResolver().openInputStream(mUri);
Получаю из потока размеры картинки, при этом не загружаю в память:
BitmapFactory.decodeStream(fis, null, optionsBitmap);
Далее определяю новый требуемый размер картинки с помощью метода inSampleSize:
optionsBitmap.inSampleSize = calculateInSampleSize(optionsBitmap, NEED_WIDTH_IMAGE, NEED_HEIGHT_IMAGE)
Пытаюсь создать Bitmap с новым размером. При этом из потока я благополучно получил размер картинки.
FileInputStream fis2 = (FileInputStream)
mContext.getContentResolver().openInputStream(mUri);
Bitmap scaledImage = BitmapFactory.decodeStream(fis2,null,optionsBitmap);
Выдает ошибку scaledImage равно null. При этом если загружать без optionsBitmap, то картинка загружается. Не могу понять где ошибка и почему не могу получить изображение.Подскажите пожалуйста.
Полный код метода:
private Bitmap checkANdScale() {
Bitmap scaledImage = null;
BitmapFactory.Options optionsBitmap = new BitmapFactory.Options();
optionsBitmap.inJustDecodeBounds = true;
try {
FileInputStream fis = (FileInputStream) mContext.getContentResolver().openInputStream(mUri);
BitmapFactory.decodeStream(fis, null, optionsBitmap);
if (fis != null) {
fis.close();
}
optionsBitmap.inSampleSize = calculateInSampleSize(optionsBitmap, NEED_WIDTH_IMAGE, NEED_HEIGHT_IMAGE);
FileInputStream fis2 = (FileInputStream) mContext.getContentResolver().openInputStream(mUri);
scaledImage = BitmapFactory.decodeStream(fis2,null,optionsBitmap);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
return scaledImage;
}
Все, разобрался. В коде я использовал options из старого потока.Создал новый options и все заработало.
BitmapFactory.Options optionsCreateBitmap = new BitmapFactory.Options();
FileInputStream fis2 = (FileInputStream) mContext.getContentResolver().openInputStream(mUri);
optionsCreateBitmap.inSampleSize = 2;
scaledImage = BitmapFactory.decodeStream(fis2, null, optionsCreateBitmap);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Тест запускает браузер и падаетКак это можно исправить? Получаю такой лог:
У меня есть массив JTextField[][], после ввода символа в JTextField[i][j], остальные поля блокируются(jTextField_entersetEditable(false);)