将Camera.Parameters :: setRotation旋转三星s2相机拍摄的图像?

时间:2014-05-16 13:54:32

标签: java android layout camera

Galaxy S2拍摄人像照片并添加ORITENTATION_ROTATION_90 exif tag

因此,当我将照片上传到我的服务器时,它会以横向显示。

我正在使用min API 8.

我很困惑,如果有人解释,我会很感激。

1)我试过了:

     ExifInterface exif;
        try {
          exif = new ExifInterface(imageFilename);
          int orientation =
              exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
          exif.setAttribute(ExifInterface.TAG_ORIENTATION,
              String.valueOf(ExifInterface.ORIENTATION_ROTATE_270));
//also tried ExifInterface.ORIENTATION_ROTATE_UNDEFINED)
          exif.saveAttributes();
          orientation =
              exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
          boolean b = orientation == Configuration.ORIENTATION_LANDSCAPE;

        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }

但它没有帮助。属性已更改,但图像仍处于横向状态。

2)我目前的解决方案:

在客户端创建一个新的旋转位图。

但这可能代价高昂。

3)另一个建议的解决方案:

  

Camera.Parameters :: setRotation

     

...相机驱动程序可能会旋转图片和EXIF缩略图。   如果旋转Jpeg图片,则EXIF标题中的方向   将丢失或1(行#0是顶部,列#0是左侧)。

然后我看到了这段代码:

public void onOrientationChanged(int orientation) {
   if (orientation == ORIENTATION_UNKNOWN) return;

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

   parameters.setRotation(degrees );
   mcamera.setParameters(parameters);
}

(3)会满足我的需求吗?

stackoverflow中的另一位朋友说只有(2)会为我工作

但我无法理解为什么。

0 个答案:

没有答案