2012-08-31 81 views
3

當通過意圖捕獲圖像時,我遇到了一個問題。如何通過Intent捕獲圖像時獲取方向類型?

我使用默認的意圖代碼來捕獲圖像。如下。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, TAKE_PHOTO_CODE); 

並在onActivityResult中接收它如下。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if(TAKE_PHOTO_CODE==requestCode){ 

     try { 
      Bundle extras = data.getExtras(); 
      Bitmap mImageBitmap = (Bitmap) extras.get("data"); 
      selectedImagePath = saveImageInfo(mImageBitmap, "image"); 
      ExifInterface exif = new ExifInterface(selectedImagePath); 
      Toast.makeText(getBaseContext()," "+exif.getAttribute(ExifInterface.TAG_ORIENTATION), Toast.LENGTH_SHORT).show(); 

     try { 
       showDialog(DIALOG_UPLOADING); 

      } catch (Exception e) { 

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

      e.printStackTrace(); 
      Toast.makeText(getApplicationContext(), "No image selected.. ", Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

我想在這個onActivityResult方法所拍攝的圖像的方向,我有搜索和了解它,並找到了ExifInterface,但它不爲我工作,我測試LG的Optimus Android設備上,它總是返回0爲了我。

問題是捕捉圖像旋轉後的問題。 任何解決方案?

+0

你爲什麼不嘗試比較'height'and其'width'?如果'h> = w'那麼* portrait * else * landscape *? – Aprian

+1

比較高度和寬度會產生問題......在nexus 1和nexus S上測試它,你會發現問題... –

回答

0

您可以通過使用該方法獲得的旋轉,然後根據結果將圖像旋轉 -

private int getDisplayRotation() { 
    int rotation = getWindowManager().getDefaultDisplay().getRotation(); 
    switch (rotation) { 
     case Surface.ROTATION_0: return 0; 
     case Surface.ROTATION_90: return 90; 
     case Surface.ROTATION_180: return 180; 
     case Surface.ROTATION_270: return 270; 
    } 
    return 0; 
} 

擺脫大量的設備特定問題的,我創造了從無到有相機 你可以得到從https://github.com/vinsol/expense-tracker/tree/master/src/com/vinsol/expensetracker/cameraservice

,然後代碼中調用它使用以下方法

private void startCamera() { 
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { 
     Intent camera = new Intent(this, Camera.class); 
     File file = new File("123.jpg"); 
     Log.d("camera file path "+file.toString()); 
     camera.putExtra("FullSizeImagePath", file.toString()); 
     startActivityForResult(camera, PICTURE_RESULT); 
    } else { 
     Toast.makeText(this, "sdcard not available", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

感謝您的迴應,getDisplayRotation()總是返回0。我也不想通過課程實現開放式相機。有沒有內置的方法?通過它我們可以得到它的方向。 – Himanshu

+0

它會根據佈局文件中的方向和方向返回...如果您在平板電腦上進行測試,這將返回90 ...您可以從https://play.google.com/store/apps測試相機/details?id=com.vinsol.expensetracker,它與谷歌使用的方法相同(我使用相機2.2和4.0代碼併合並代碼以使相機像這樣) –