通过Intent捕获图像时如何获取方向类型?

4

我遇到了一个问题,当通过意图捕获图像时。

我正在使用捕获图像的默认意图代码。如下所示。

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。

问题是在捕获图像后,它被旋转了。 有解决方案吗?


为什么不尝试比较heightwidth? 如果 h>=w 则是 portrait,否则是 landscape - Aprian
1
比较高度和宽度会造成问题...在Nexus 1和Nexus S上测试一下,你就会看到问题了... - Hitesh Sondhi
1个回答

1

您可以使用该方法获取旋转角度,然后根据结果旋转图像 -

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();
    }
}

感谢您的回复,无论什么情况下getDisplayRotation()始终返回0。而且我不想通过类来实现打开相机。是否有任何内置方法可以获取其方向? - Himanshu
它将根据您的布局文件中的方向返回...如果在平板电脑上测试,则会返回90...您可以从https://play.google.com/store/apps/details?id=com.vinsol.expensetracker测试相机,这与Google使用的方法相同(我使用了相机2.2和4.0代码并合并了代码以使相机变成这样) - Hitesh Sondhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接