2016-05-03 148 views
0

爲什麼圖像在imageView中旋轉90度?以及如何解決它?爲什麼圖像在ImageView中旋轉90度?

圖庫中的所有圖像都不會在imageView中旋轉90度。

我不知道爲什麼一些圖像在imageView中旋轉了90度。

@Override 
protected void onActivityResult(int requestCode , int resultCode , Intent data){ 
    if(requestCode == 100){ 
     if(resultCode == Activity.RESULT_OK){ 
      try{ 
       ImageView imageView = (ImageView)View.inflate(this, R.layout.imagelayout, null); 
       Uri imgUri = data.getData(); 

      Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imgUri); 
       int height = bitmap.getHeight(); 
       int width = bitmap.getWidth(); 
       int newHeight = height; 
       int newWidth = width; 
       float rate = 0.0f; 

       if(width > height){ 
        if(imageFlipper.getWidth() < width){ 
         rate = imageFlipper.getWidth()/(float) width ; 
         newHeight = (int) (height * rate); 
         newWidth = imageFlipper.getWidth(); 
        } 
       }else{ 
        if(imageFlipper.getHeight() < height){ 
         rate = imageFlipper.getHeight()/(float) height ; 
         newWidth = (int) (width * rate); 
         newHeight = imageFlipper.getHeight(); 
        } 
       } 


       Bitmap reSize = Bitmap.createScaledBitmap(bitmap , newWidth , newHeight,true); 

       imageView.setImageBitmap(reSize); 

       //imageView.setImageURI(imgUri); 
       imageFlipper.addView(imageView); 
       imageFlipper.setDisplayedChild(imageFlipper.getChildCount() - 1); 

      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

即使沒有imageFlipper,這會發生嗎? –

+0

哦,我會嘗試'~~ – tokhi

回答

1

在某些設備中,啓動相機時,方向會改變。在我的一個應用程序中,我也遇到了這個問題。爲了解決這個問題,我們需要找到方向並相應地旋轉圖片。

// capture image orientation 

    public int getCameraPhotoOrientation(Context context, Uri imageUri, 
      String imagePath) { 
     int rotate = 0; 
     try { 
      context.getContentResolver().notifyChange(imageUri, null); 
      File imageFile = new File(imagePath); 
      ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath()); 
      int orientation = exif.getAttributeInt(
        ExifInterface.TAG_ORIENTATION, 
        ExifInterface.ORIENTATION_NORMAL); 

      switch (orientation) { 
      case ExifInterface.ORIENTATION_ROTATE_270: 
       rotate = 270; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_180: 
       rotate = 180; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_90: 
       rotate = 90; 
       break; 
      } 

      Log.i("RotateImage", "Exif orientation: " + orientation); 
      Log.i("RotateImage", "Rotate value: " + rotate); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return rotate; 
    } 

我們需要使用返回的整數來設置Imageview的角度。

int rotateImage = getCameraPhotoOrientation(this, uriLargeImage, 
        mediaFile.getAbsolutePath()); 

articleview.setRotation(rotateImage); // articleview is ImageView 

所以,基本上,請找到照片的方向和時間。這是ExifInterface。使用此信息進行旋轉。

希望這會有所幫助。祝一切順利。

+0

感謝您的評論。我對這個問題有疑問。 – tokhi

+0

請讓我知道你有什麼問題,希望你嘗試了代碼更改建議 –

+0

如果圖像旋轉90度的權利。要糾正照片的方向,圖像向左旋轉90度?左方向選項是 - (減號)?? – tokhi