设备处于横向时如何拍摄肖像照片

时间:2014-08-29 12:34:51

标签: android camera

我正在制作一个相当专业的相机应用程序,用于实际上总是以横向方向保持的设备。该规范的一部分是它必须能够以纵向方式预览和拍摄照片 - 请参阅配置' A'下面。 enter image description here

(现在在任何人投票结束这个问题之前,这表明这是this other SO question的重复,让我指出另一个问题只是解决是否是否可能 - 声明的答案是肯定的。这个问题是关于如何可以完成的。)

我已经为预览设置了一个TextureView并调用了camera.setPreviewTexture(),所以我在屏幕上看到了相机的图像。我也有代码和运行,它可以完成我所需要的横向版本,请参阅配置' B'下面。

enter image description here 为了设置摄像机参数,我首先使用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);

不幸的是,这并没有完成这项工作。应用程序运行时我最终看到的更像是这样的: enter image description here 正如您所看到的,此预览中显示的图像本质上是一个比它高的图像,它已经变形为一个比它更宽的矩形。生成的保存的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);之间设置哪些参数?

1 个答案:

答案 0 :(得分:0)

我用相机和照片做了很多工作,以实现类似于"面对孔的应用" 在这种情况下,问题是您尝试使用绝对值设置大小。

 camera_parameters.setPreviewSize(480,640);
 camera_parameters.setPictureSize(480,640); 

这可能会在您的手机/模拟器上抛出异常而在另一个手机/模拟器中可以正常运行。问题是你必须阅读允许的大小(与摄像机相关)并创建一个算法来在它们之间进行选择。 功能是:

  1. Camera.Parameters.getSupportedPictureSizes()
  2. Camera.Parameters.getSupportedPreviewSizes()
  3. 在这里你可以找到一个非常简单的例子:

     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);
    

    通过这些提示,您可以找到最符合您期望的解决方案。