2016-03-10 4 views
1

Я нашел некоторый код на 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.

+1

Сжать, что изменяет размер растрового изображения в выходной файл потока ориентируетесь каталог по вашему выбору. Приложение галереи не имеет собственных папок. Это просто приложение, которое показывает все изображения на вашем устройстве. – greenapps

+0

@greenapps - Если вы раскроете это как ответ, я с радостью соглашусь. – blueprintChris

ответ

0

мне удалось решить эту проблему с помощью метода ниже:

public void saveResizedImage(Bitmap image) { 

     File root = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "rapical" + File.separator); 
     String path = root.getPath(); 
     OutputStream fOut = null; 
     File noOfImages[] = root.listFiles(); 
     int fileCount = 0; 
     for (int i = 0; i < noOfImages.length; i++) { 
      fileCount++; 
     } 
     File foodImageFile = new File(path, "rapical" + fileCount + ".png"); 
     try { 
      fOut = new FileOutputStream(foodImageFile); 
      image.compress(Bitmap.CompressFormat.PNG, 50, fOut); 
      fOut.flush(); 
      fOut.close(); 
      String imagePath = path + "/rapical" + fileCount + ".png"; 
      Log.w("ImagePath: ", imagePath); 

     } catch (Exception e) { 

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