我正在制作一个相当专业的相机应用程序,用于实际上总是以横向方向保持的设备。该规范的一部分是它必须能够以纵向方式预览和拍摄照片 - 请参阅配置' A'下面。
(现在在任何人投票结束这个问题之前,这表明这是this other SO question的重复,让我指出另一个问题只是解决是否是否可能 - 声明的答案是肯定的。这个问题是关于如何可以完成的。)
我已经为预览设置了一个TextureView并调用了camera.setPreviewTexture(),所以我在屏幕上看到了相机的图像。我也有代码和运行,它可以完成我所需要的横向版本,请参阅配置' B'下面。
为了设置摄像机参数,我首先使用getParameters()读取摄像机自己的设置,然后修改我想要更改的设置。因此,在配置' B'的情况下,只需执行以下代码:
camera_parameters = camera.getParameters();
camera_parameters.setPreviewSize(640,480);
camera_parameters.setPictureSize(640,480);
camera.setParameters(camera_parameters);
(编辑:我已经检查过640x480可用于预览和图片尺寸)。 该应用程序的工作原理完全符合我的预期。
试图获得配置问题时会出现问题。工作。这次,我将纹理视图设置得比它高,然后执行以下代码:
camera_parameters = camera.getParameters();
camera_parameters.set("orientation", "portrait");
camera_parameters.setPreviewSize(640,480);
camera_parameters.setPictureSize(640,480);
camera.setParameters(camera_parameters);
不幸的是,这并没有完成这项工作。应用程序运行时我最终看到的更像是这样的: 正如您所看到的,此预览中显示的图像本质上是一个比它高的图像,它已经变形为一个比它更宽的矩形。生成的保存的jpeg图像文件也比它高。
我想也许我需要将代码更改为以下内容:
camera_parameters = camera.getParameters();
camera_parameters.set("orientation", "portrait");
camera_parameters.setPreviewSize(480,640);
camera_parameters.setPictureSize(480,640);
camera.setParameters(camera_parameters);
但这会导致异常" setParameters失败"。
所以我的问题是,我应该在camera.getParameters();
和setParameters(camera_parameters);
之间设置哪些参数?
答案 0 :(得分:0)
我用相机和照片做了很多工作,以实现类似于"面对孔的应用" 在这种情况下,问题是您尝试使用绝对值设置大小。
camera_parameters.setPreviewSize(480,640);
camera_parameters.setPictureSize(480,640);
这可能会在您的手机/模拟器上抛出异常而在另一个手机/模拟器中可以正常运行。问题是你必须阅读允许的大小(与摄像机相关)并创建一个算法来在它们之间进行选择。 功能是:
在这里你可以找到一个非常简单的例子:
mCamera = Camera.open();
Camera.Parameters params = mCamera.getParameters();
List<Size> sizes = params.getSupportedPictureSizes();
// See which sizes the camera supports and choose one of those
mSize = sizes.get(0);
params.setPictureSize(mSize.width, mSize.height);
mCamera.setParameters(params);
通过这些提示,您可以找到最符合您期望的解决方案。