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

Posted

技术标签:

【中文标题】相机显示不保持纵横比/似乎歪斜【英文标题】:Camera display doesn't maintain aspect ratio/seems skewed 【发布时间】:2011-10-06 08:05:30 【问题描述】:

我在 android 中遇到了相机输入问题。在网上搜索了半天后,我没有进一步了解。

我想在这个阶段实现的是正确显示当前的相机输入。现在不多也不少。在横向模式下握住设备时,一切似乎都很好。但是,一旦我将设备切换为纵向,显示器似乎会水平缩放以匹配设备上屏幕的宽度。

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

Landscape (looks correct) Portrait (looks incorrect)

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

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

我是否遗漏了一些明显的东西或者这是预期的行为?

希望有人能指出正确的方向。

提前致谢!

保罗

【问题讨论】:

失真效果在附加图像中有点丢失。但是在横向图像上,计算机屏幕看起来是宽屏的。在纵向图像上,它看起来像一个方形屏幕。 你设置的预览分辨率是多少? 分辨率取决于设备。在本例中,Galaxy 选项卡上的分辨率为 1024 x 524。 好的,我自己找到了答案,但不幸的是,我作为新手不允许回答我自己的问题,我需要等待 5 个小时才能发布完整答案。但是诀窍如下: requestWindowFeature(Window.FEATURE_NO_TITLE);一旦我被允许,将发布完整的动机。 您好,您是否也遇到过这个问题:***.com/questions/16727836/…?谢谢 【参考方案1】:

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

requestWindowFeature(Window.FEATURE_NO_TITLE);

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

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

【讨论】:

是的,我现在也得出了同样的结论。不知道为什么相机不尊重纵横比,因为您想通过相机查看事物的外观。

以上是关于相机显示不保持纵横比/似乎歪斜的主要内容,如果未能解决你的问题,请参考以下文章

计算最佳相机预览尺寸的正确方法保持纵横比

调整图像大小保持纵横比

Android 在保持纵横比的同时显示图像

响应式图像全屏和居中 - 保持纵横比,不超过窗口

CSS保持纵横比不起作用

在不保持纵横比的情况下使用 mogrify 调整图像大小