Я нашел некоторый код на SO, помогая мне создать селектор изображений, сохранить изображение, изменить размер/декодировать его и отображать его в ImageView, однако я хочу знать, как сохранить это новое изображение с измененным размером в другую папку в Галерее, а затем вернуть новое местоположение (включая имя файла) в виде строки. Вот то, что я до сих пор:Как выбрать изображение из галереи, изменить размер и переустановить его в другую папку галереи
Запуск сборщика изображения намерения:
public void openGallery() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
Получение выбранного изображения:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case SELECT_PHOTO:
if (resultCode == RESULT_OK) {
try {
Uri selectedImage = imageReturnedIntent.getData();
InputStream imageStream = getContentResolver().openInputStream(selectedImage);
Bitmap yourSelectedImage = decodeUri(selectedImage);
imageIcon.setImageBitmap(yourSelectedImage);
imageText.setText("");
} catch (Exception e) {
Toast.makeText(this, "Image Selection Error", Toast.LENGTH_LONG).show();
}
}
}
}
Функция для декодирования изображения:
private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException {
// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o);
// The new size we want to scale to
final int REQUIRED_SIZE = 200;
// Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp/2 < REQUIRED_SIZE
|| height_tmp/2 < REQUIRED_SIZE) {
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
// Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o2);
}
Я также не уверен, правильно ли я реализовал эту функцию декодирования, изменив значение REQUIRED_SIZE int не имеет значения, когда он отображается в ImageView.
Сжать, что изменяет размер растрового изображения в выходной файл потока ориентируетесь каталог по вашему выбору. Приложение галереи не имеет собственных папок. Это просто приложение, которое показывает все изображения на вашем устройстве. – greenapps
@greenapps - Если вы раскроете это как ответ, я с радостью соглашусь. – blueprintChris