android - 摄像头显示不保持纵横比/似乎歪斜

标签 android

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

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

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

这个问题似乎也出现在 API 示例中的相机示例中,但当我从我的设备使用相机应用程序时似乎没有出现。很明显,那里正在发生其他事情。

我使用的代码基于可以在 Internet 上找到的示例,没有任何修改:

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(...)”,这听起来像我需要的方法,但它并没有改变任何东西。为了尽可能简短,我将它留在此处。

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

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

提前致谢!

保罗

最佳答案

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

requestWindowFeature(Window.FEATURE_NO_TITLE);

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

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

关于android - 摄像头显示不保持纵横比/似乎歪斜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6710573/

相关文章:

java - 我的代码无法正确替换 html 字符串?

java - 在 Android apk 中查找死代码

android - 如何使用脚本查询android sqlite数据库

android - PrivacyListManager.getInstanceFor 在 android aSmack 中为 NULL

Android - View 在 ListView 滚动时丢失填充

Android ADT Eclipse : com. android.common 和 com.android.ex 导入无法解析

android - 如何在 Android 4.0/Ice Cream Sandwich 中获取该平台?

android - 网页 View 和 Css3

android - Google Play 商店发布检查

android - 动态创建按钮,我可以选择一个按钮并取消选择其他按钮吗?