【问题标题】:Camera on SurfaceView: set orientation of picture takenSurfaceView 上的相机:设置拍摄照片的方向
【发布时间】:2014-05-22 20:22:31
【问题描述】:

这是在surfaceView中拍照的mt代码:

@Override
public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();

    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.setDisplayOrientation(90);


    } catch (IOException exception) {
        mCamera.release();
        mCamera = null;
    }

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    Camera.Parameters params = mCamera.getParameters();
    Camera.Size result = getBestPreviewSize(params, width, height);
    params.setPreviewSize(result.width, result.height);

    params.setPictureFormat(ImageFormat.JPEG);
    params.setJpegQuality(100);
    mCamera.setParameters(params);

    mCamera.startPreview();

}

图片预览为纵向模式,但图片旋转保存在我的存储中。如何以相同的预览方向保存图片?

【问题讨论】:

  • 嗨。你设法解决了这个问题吗?

标签: android android-camera surfaceview


【解决方案1】:

我遇到了同样的问题,但我在输入一行代码时解决了它 surfaceChanged 方法

params.setRotation(90);

将您的代码更改为:

public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
    Camera.Parameters params = mCamera.getParameters();
    Camera.Size result = getBestPreviewSize(params, width, height);
    params.setPreviewSize(result.width, result.height);

    params.setRotation(90)  ***//Just add this single line of code***

    params.setPictureFormat(ImageFormat.JPEG);
    params.setJpegQuality(100);
    mCamera.setParameters(params);

    mCamera.startPreview();

}

【讨论】:

    【解决方案2】:

    在您的 Activity 中将旋转声明为静态 int 变量

    rotation = getWindowManager().getDefaultDisplay().getRotation();

    然后在相机预览类中添加这一行

     if(YourActivityname.rotation == 0 || YourActivityname.rotation == 180)
            this.mCamera.setDisplayOrientation(90);
       else
            this.mCamera.setDisplayOrientation(0);
    

    参考这个 http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRotation%28int%29

    public void setRotation(整数旋转)

    【讨论】:

    • 我设备上的旋转已锁定,并且使用您的代码,图片始终保存旋转。但是使用 setDisplayOrientation,我只需在 surfaceView 上设置相机预览的方向
    【解决方案3】:

    setRotation() 的文档中明确说明,系统可以选择仅设置图像已旋转的 EXIF 标志。实际上,在许多设备上,e.g. Samsung 这正是发生的情况。

    您可以使用Java open source libraryAndroid port,它提供了无损Jpeg 旋转的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多