Android 通过摄像头硬件拍摄图像工作不正常?

Android 通过摄像头硬件拍摄图像工作不正常?,android,camera,android-camera,android-camera-intent,Android,Camera,Android Camera,Android Camera Intent,我正在尝试使用相机硬件来捕获图像列表。但在启动“摄影机视图”时,视图看起来与平常不同。屏幕截图附在下面。我正在运行安卓4.0.3的HTC Sensation中测试这一点 纵向拍摄时的图像截图 它看起来不像普通的相机视图 这里有什么问题 我哪里做错了 这是在人像模式下使用Android定制相机的常见问题。您可能有一个用于显示相机预览的SurfaceView。我将以下代码行添加到我的surfaceCreated方法中: camera.setDisplayOrientation(90); 有关更多信

我正在尝试使用相机硬件来捕获图像列表。但在启动“摄影机视图”时,视图看起来与平常不同。屏幕截图附在下面。我正在运行安卓4.0.3的HTC Sensation中测试这一点

纵向拍摄时的图像截图
它看起来不像普通的相机视图

这里有什么问题


我哪里做错了

这是在人像模式下使用Android定制相机的常见问题。您可能有一个用于显示相机预览的SurfaceView。我将以下代码行添加到我的
surfaceCreated
方法中:

camera.setDisplayOrientation(90);

有关更多信息,请查看有关此主题的其他一些答案(、和)。基本上,安卓摄像头设置为横向显示模式,因此如果活动处于纵向模式,则需要旋转方向以适应此情况。

默认情况下,硬件摄像头为横向(几乎很多设备),因此您一拍,我会自动旋转到90度,就像在横向拍摄一样

这就是为什么当你在横向和90度旋转图像拍摄时,在纵向模式下拍摄时,你会得到正确的图像

  • 检测设备的方向,如果是纵向的,则顺时针旋转90度,使其在逆时针旋转90度时符合要求
使用以下代码检测方向

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) 
    {
        super.onRestoreInstanceState(savedInstanceState);
        if (savedInstanceState != null) 
        {
            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
            {
                // code in portrait - rotate to 90 degree
            }
            else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
            {
                    // code in landscape - do nothing
            }

        }
    }

安卓摄像头已经占据了我的生活:)很高兴与大家分享。谢谢丹尼尔。关于在视图中添加按钮的任何想法我想在相机视图中添加捕获、添加和缩放按钮。做这件事最好的方法是什么?我可能会(完全公开我不太精通布局优化的知识)把所有东西都放到一个大的相对布局中,作为你的第一个元素,你需要一个元素来放置你的相机预览(我通常将带有摄影机预览的曲面视图作为第一个元素添加到FrameLayout中),下面是另一个相对的布局,您可以添加
按钮
s或
图像按钮
s,背景来自您的绘图。这里没有金色子弹。您只需要用一些xml弄脏您的手。谢谢您的建议。我将对我的xml做一些更改。您能给出您的代码吗?我非常需要它。