1

我正在努力將圖像自動旋轉成圖像視圖。如何防止imageview中的自動圖像旋轉?

Issue no。 1

根據我的觀察,如果圖像旋轉到任意角度,那麼在將圖像顯示到imageview時,android會根據旋轉角度旋轉該圖像。如果圖像旋轉到180度CW,然後android將圖像重新旋轉180度以正確顯示圖像。我不想android旋轉圖像。

即使畫廊顯示圖像,因爲它是。設備庫在顯示圖像時沒有進行任何操作。

Issue no。 2 三星設備的另一個問題。三星默認拍攝角度是風景。意思是如果我在橫向模式下捕捉任何照片,圖像旋轉將爲0.但是,如果我在縱向模式下捕捉圖像,圖像旋轉值將爲90.問題從這裏開始。現在,如果試圖顯示該肖像圖像android圖像視圖將該圖像旋轉90度。所以圖像將水平顯示而不是垂直顯示。

作爲解決方案,我可以從圖像中讀取旋轉角度並在顯示之前進行計算。

Issue no。 3

但是,當用戶從Google驅動器中選擇圖像時,我將不會有所選圖像的元數據。所以如果沒有它,我怎麼能決定圖像應該旋轉到這個程度。

我期待以下問題的解決方案。

  1. 如何處理三星設備的旋轉?
  2. 如何從谷歌驅動器中選擇的圖像獲取旋轉值?
  3. 計算旋轉圖像?
  4. 有沒有辦法說android不旋轉圖像?
+0

請參閱此鏈接,您將找到您的解決方案: https://stackoverflow.com/a/45168025/7765499 –

回答

1

您正在尋找ExifInterface。有一個支持版本和一個很好的描述link

我不知道有什麼辦法可以避免自動旋轉,但下面有示例代碼來檢測圖像旋轉和設置正確的。希望這可以幫助。

  ExifInterface exif = new ExifInterface(path); 
      int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 
      Matrix matrix = new Matrix(); 
      switch (orientation) { 
       case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: 
        matrix.setScale(-1, 1); 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_180: 
        matrix.setRotate(180); 
        break; 
       case ExifInterface.ORIENTATION_FLIP_VERTICAL: 
        matrix.setRotate(180); 
        matrix.postScale(-1, 1); 
        break; 
       case ExifInterface.ORIENTATION_TRANSPOSE: 
        matrix.setRotate(90); 
        matrix.postScale(-1, 1); 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_90: 
        matrix.setRotate(90); 
        break; 
       case ExifInterface.ORIENTATION_TRANSVERSE: 
        matrix.setRotate(-90); 
        matrix.postScale(-1, 1); 
        break; 
       case ExifInterface.ORIENTATION_ROTATE_270: 
        matrix.setRotate(-90); 
        break; 
      }