出于某种原因,我的程序中的相机进纸是侧面的。如果我从底部将手指放到相机上,它会在Surfaceview中显示为右侧。
我有一个非常标准的实现
surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(surfaceCallback);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
我环顾四周,但似乎无法找到任何相关信息。我的设备是nexus One。
编辑:如果我将屏幕方向设置为横向,那么由于某种原因它可以正常工作......但是不能以纵向拍摄。
答案 0 :(得分: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)输出图像时会改变图像的方向。此方法不会更改预览显示方向。
答案 1 :(得分:0)
使用此行
mCamera.setDisplayOrientation(90);
在之后的surfaceCreated方法中
mCarmera.open();