2016-07-01 194 views
1

我想旋轉並保存旋轉的圖像,並將其移動到我的Android設備中的其他地方。位圖旋轉和保存圖像

  1. 我可以旋轉我的圖像並將其設置爲圖像視圖。
  2. 我可以將UN-ROTATED圖像複製到我選擇的目的地。

我不能做的就是保存旋轉圖像文件的唯一的事(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); 

現在上面只是暫時旋轉,直到活動結束,現在我想從上面的代碼保存這個旋轉的圖像,並將它上傳到服務器之前,它已經知道如何複製/移動文件並上傳不需要發佈這些代碼 - 我需要的只是用於保存旋轉圖像的代碼,所以我有一些代碼荷蘭國際集團一樣/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的最後一個論據虛假

參考,我的代碼:

@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:最後一個參數是過濾器布爾值:如果應該過濾源 ,則返回true。僅適用於矩陣不僅包含 翻譯。

連接至更多信息:Last argument more info

+0

謝謝,我只是不得不將Bitmap.CompressFormat.PNG更改爲Bitmap.CompressFormat.JPEG – user3560827

+0

好吧確定..但如果這個答案幫助你獲得更多的信息,那麼請注意它 –

+0

我批准和upvoted,一定是一個網絡干擾,我會再做一次 – 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");