2012-08-31 32 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代码并合并代码以使相机像这样) –