【问题标题】:SurfaceView is displaying camera feed sidewaysSurfaceView 侧向显示摄像头馈送
【发布时间】:2010-07-19 17:22:22
【问题描述】:

由于某种原因,我的程序中的摄像头是横向的。如果我从底部将手指放在相机上,它会在表面视图中显示为来自右侧。

我有一个非常标准的实现

    surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(surfaceCallback);
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

我环顾四周,但似乎找不到任何关于此的信息。我的设备是nexus One。

编辑:如果我将屏幕方向设置为横向,那么由于某种原因它可以正常工作...虽然无法纵向显示。

【问题讨论】:

  • 我之前也遇到过这个问题,但一直没有解决它。我真的不认为问题出在您发布的代码中

标签: java android


【解决方案1】:

预览显示图像的方向由Camera.setDisplayOrientation(int)方法控制。对于我的 Evo,将方向设置为 90 可使预览显示在纵向模式下正确。

...
camera.setParameters(parameters);
camera.setDisplayOrientation((orientation+90)%360);
camera.startPreview();
...

似乎在预览开始后更改方向会导致异常。如果您更改旋转手机/设备,SurfaceHolder.surfaceChanged 回调将再次被调用,如果您在该回调中执行 setDisplayOrientation 和 startPreview,您会收到异常。我正在尝试停止预览,然后更改方向,然后重新开始。

注意:还有Camera.Parameters.setRotation(int) 方法,(我认为)在拍照时将图像写入(JPEG)输出图像时会改变图像的方向。此方法不会更改预览显示方向。

【讨论】:

    【解决方案2】:

    使用这条线

      mCamera.setDisplayOrientation(90);
    

    在surfaceCreated方法之后

      mCarmera.open();
    

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 2015-07-28
      相关资源
      最近更新 更多