我在Android中遇到摄像头输入问题。在互联网上搜索了半天后,我再也没有了。
Wat我想在这个阶段实现正确显示当前的摄像头输入。现在没有更多,也没有更少。将设备保持在横向模式时,一切似乎都很好。但是,只要我将设备切换为纵向,显示器就会水平缩放,以匹配设备屏幕的宽度。
为了更清楚地澄清这个问题,我附上了两张照片:
似乎这个问题也出现在API示例中的相机示例中,但是当我从我的设备使用相机应用程序时似乎不会发生这种情况。显然,其他事情正在发生。
我使用的代码基于可以在互联网上找到并且没有修改的示例:
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(...)”,这听起来像我需要的方法,但这并没有改变任何东西。我把它留在这里是为了尽可能简短。
我是否遗漏了一些明显的东西,或者这是预期的行为?
希望有人能指出我正确的方向。
提前致谢!
保
答案 0 :(得分:1)
好的,我刚刚找到了自己问题的答案。 我解决它的方法是使用我的应用程序全屏:
requestWindowFeature(Window.FEATURE_NO_TITLE);
这有点意义,因为我猜我们不能使用任何分辨率作为相机上的预览尺寸。我猜它会在内部捕捉到最接近的允许分辨率/宽高比,并且它不会做任何智能的事情,比如裁剪图像以匹配所请求的分辨率,同时保持宽高比。在我的情况下,我在源图像全屏时显示标题栏,然后缩小尺寸以适应屏幕。
我认为不保持宽高比并且默认情况下不会裁剪图像有点愚蠢,