2010-07-19 45 views
1

出于某种原因,我的程序中的摄像机馈送是横向的。如果我将手指从底部按住相机,它会在曲面视图中显示为来自右侧。SurfaceView正在侧面显示摄像机馈送

我有一个非常标准的实施

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

我环顾四周,但我似乎无法找到这方面的消息。我的设备是一个nexus One。

编辑:如果我将屏幕方向设置为横向然后它由于某种原因正常工作...虽然不能在纵向获取它。

+0

我有这个问题而回,以及和很少抽时间去解决它。我真的不认为问题出现在您发布的代码中 – 2010-07-19 17:43:41

回答

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)输出图像时改变图像的方向。此方法不会更改预览显示方向。

0

使用此行

mCamera.setDisplayOrientation(90); 

在surfaceCreated方法之后

mCarmera.open();