相机显示不保持纵横比/看似歪斜

Pau*_*ulT 5 android

我在Android中遇到摄像头输入问题.在网上搜索了半天之后,我再也没有了.

我希望在这个阶段实现的Wat正确显示当前的摄像头输入.现在没有更多,也没有更少.将设备保持在横向模式时,一切似乎都很好.但是,只要我将设备切换为纵向,显示器就会水平缩放,以匹配设备屏幕的宽度.

为了更清楚地澄清这个问题,我附上了两张照片:

似乎这个问题也出现在API示例中的相机示例中,但是当我从我的设备使用相机应用程序时似乎不会发生这种情况.显然,其他事情正在发生.

我正在使用的代码基于可以在互联网上找到并且没有修改的示例:

class Preview extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    Camera mCamera;

    Preview(Context context) {
        super(context);
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mCamera = null;
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(w, h);
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }
}
Run Code Online (Sandbox Code Playgroud)

API示例使用方法"getOptimalPreviewSize(...)",这听起来像我需要的方法,但这不会改变任何东西.我把它留在这里是为了尽可能简短.

我错过了一些明显的或者这是预期的行为吗?

希望有人可以指出我正确的方向.

提前致谢!

保罗

Pau*_*ulT 1

好吧,我刚刚找到了我自己问题的答案。我解决这个问题的方法是全屏显示我的应用程序:

requestWindowFeature(Window.FEATURE_NO_TITLE);
Run Code Online (Sandbox Code Playgroud)

这有点道理,因为我想我们不能使用任何分辨率作为相机上的预览尺寸。我想它会在内部捕捉到最接近的允许分辨率/长宽比,并且它不会做任何智能的事情,例如裁剪图像以匹配请求的分辨率,同时保持长宽比。就我而言,我在源图像全屏显示时显示标题栏,然后缩小大小以适合屏幕。

我认为默认情况下不保持长宽比并且不裁剪图像有点愚蠢,