2016-07-01 4 views
1

Я хотел бы повернуть и сохранить повернутое изображение и переместить его в другое место в моем устройстве Android.Bitmap Rotate And Save Image

  1. Я могу повернуть мое изображение и установить его в режим просмотра изображения.
  2. Я могу скопировать изображение UN-ROTATED в пункт назначения по своему выбору.

Единственное, я не могу сделать, это получить сохраненную повернутого изображения FILE (rotated.jpg)

Мой код ниже, чтобы повернуть: (это не спасает повернутый файл в хранилище?)

   Bitmap bmp = BitmapFactory.decodeFile(filePathLocal); 

       Matrix matrix = new Matrix(); 
       matrix.postRotate(getImageOrientation(filePathLocal)); 
       rotatedBitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);   

       //Set Image 
       ImageButton ibProfile = (ImageButton) findViewById(R.id.ibProfile); 
       ibProfile.setImageBitmap(rotatedBitmap); 

Теперь приведенное выше действие временно вращается, пока активность не закончилась, теперь я хотел бы сохранить это повернутое изображение из кода выше и переместить его перед загрузкой на сервер, я уже знаю, как копировать/перемещать файлы и загружать их нет необходимости публиковать эти коды - все, что мне нужно, это код для SAVING ROTATED IMAGE, так что у меня есть что-то ING как /sdcard/saved_rotated_image.jpg

+0

Знаете ли вы, как сохранить растровое изображение в файле? –

ответ

2
Bitmap bmp = BitmapFactory.decodeFile(filePathLocal); 

      Matrix matrix = new Matrix(); 
      matrix.postRotate(getImageOrientation(filePathLocal)); 
      rotatedBitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, false);   

      //Set Image 
      ImageButton ibProfile = (ImageButton) findViewById(R.id.ibProfile); 
      ibProfile.setImageBitmap(rotatedBitmap); 

Помещенный ложна в последний аргумент CreateBitmap в

Refere мой код:

@Override 
    protected Uri doInBackground(String... params) { 
     String filepath = params[0]; 
     String filename = params[1]; 
     String filetype = params[2]; 

     Bitmap bitmap = takeScreenShot(root); 
     Matrix rotateMatrix = new Matrix(); 
     rotateMatrix.postRotate(Datas.rotationvalue); 
     Log.e("rotationvalue", Datas.rotationvalue+"..."); 
     Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), rotateMatrix, false); 

     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     rotatedBitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes); 
     try { 
      File f = new File(filepath); 
      if (!f.exists()) { 
       f.mkdir(); 
      } 
      String folderpath = f.toString(); 
      File file = new File(folderpath, filename + "." + filetype); 

      file.createNewFile(); 
      FileOutputStream fo = new FileOutputStream(file); 
      fo.write(bytes.toByteArray()); 
      fo.close(); 
      Uri uri = Uri.fromFile(file); 
      Log.e("Edited img uri", uri.toString()); 
      return uri; 
     } catch (Exception e) { 
      Log.e("Exception...occured", e.toString()); 
      e.printStackTrace(); 
      return null; 
     } 
    } 

Этот код работает fine.At мой собственный боком, попробуйте на вашей стороне.

Согласно doc: последний аргумент является фильтром boolean: true, если источник должен быть отфильтрован. Действует только в том случае, если в матрице содержится не более перевод.

Ссылка для получения дополнительной информации: Last argument more info

+0

Спасибо, мне просто пришлось сменить Bitmap.CompressFormat.PNG на Bitmap.CompressFormat.JPEG – user3560827

+0

Хорошо, конечно .. но если эта помощь поможет вам получить больше информации, то любезно поддержите ее –

+0

Я одобрил и поддержал, должно быть, сеть вмешательство, я сделаю это снова – user3560827

1

Сохранить функцию изображения следующим образом:

\t private void saveBitmap(Bitmap bitmap, String fileName) { 
 
\t \t File file = new File(Environment.getExternalStorageDirectory(), fileName); 
 
\t \t FileOutputStream fileOS = null; 
 
\t \t try { 
 
\t \t \t fileOS = new FileOutputStream(file); 
 
\t \t \t // quality: Hint to the compressor, 0-100. 0 meaning compress for small size, 100 meaning compress for max quality. 
 
\t \t \t bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOS); 
 
\t \t \t fileOS.flush(); 
 
\t \t } catch (IOException e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t } finally { 
 
\t \t \t if (fileOS != null) { 
 
\t \t \t \t try { 
 
\t \t \t \t \t fileOS.close(); 
 
\t \t \t \t } catch (IOException e) { 
 
\t \t \t \t \t e.printStackTrace(); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } 
 
\t }

Используйте образец:

Bitmap bmp = BitmapFactory.decodeFile(filePathLocal); 
 

 
    Matrix matrix = new Matrix(); 
 
    matrix.postRotate(getImageOrientation(filePathLocal)); 
 
    rotatedBitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);   
 

 
    saveBitmap(rotatedBitmap, "saved_rotated_image.jpg");