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

2023-12-19

I am making a rather specialist camera app for a device which is physically always going to be held in a landscape orientation. Part of the spec is that it must optionally be able to preview and take photos in a portrait orientation - see configuration 'A' below. enter image description here

(现在,在有人投票结束这个问题之前,表明这是重复的这另一个问题 https://stackoverflow.com/questions/25549561/any-problems-taking-a-portrait-photo-when-device-is-in-landscape,让我指出另一个问题只是解决whether可能或不可能——声称的答案是肯定的。这个问题,是关于how可以办到。)

我已经为预览设置了一个TextureView并调用了camera.setPreviewTexture(),所以我在屏幕上看到了相机的图像。我还启动并运行了代码,该代码执行我所需要的横向版本,请参阅下面的配置“B”。

enter image description here In order to set up the camera parameters, I first of all read the camera's own settings using getParameters(), then modify just the ones I want to change. So in the case of configuration 'B', it is just a matter of executing the following code:

camera_parameters = camera.getParameters();
camera_parameters.setPreviewSize(640,480); 
camera_parameters.setPictureSize(640,480); 
camera.setParameters(camera_parameters);

(EDIT:我已经检查过 640x480 可用于预览和图片尺寸)。 然后该应用程序就可以完全按照我的预期运行。

当尝试让配置“A”工作时就会出现问题。这次,我将纹理视图设置为宽大于高,并执行以下代码:

camera_parameters = camera.getParameters();
camera_parameters.set("orientation", "portrait");
camera_parameters.setPreviewSize(640,480); 
camera_parameters.setPictureSize(640,480); 
camera.setParameters(camera_parameters);

Unfortunately this does not quite do the job. What I end up with when the app runs looks more like this: enter image description here As you can see the image displayed in this preview is essentially an image that is wider than it is tall, that has been deformed into a rectangle that is taller than it is wide. The resulting saved jpeg image file is also wider than it is tall.

我想也许我需要将代码更改为以下内容:

camera_parameters = camera.getParameters();
camera_parameters.set("orientation", "portrait");
camera_parameters.setPreviewSize(480,640); 
camera_parameters.setPictureSize(480,640); 
camera.setParameters(camera_parameters);

但这会导致异常“setParameters failed”。

所以我的问题是,我应该将哪些参数设置为哪些值camera.getParameters(); and setParameters(camera_parameters); ?


我用相机和图片做了很多工作来实现类似于“face inhole”的应用程序 在这种情况下,问题在于您尝试使用绝对值设置大小。

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

这可能会在您的手机/模拟器上引发异常,而在另一个手机/模拟器上则可以正常工作。问题是您必须读取允许的尺寸(与相机相关)并创建一个算法来在它们之间进行选择。 其功能是:

  1. Camera.Parameters.getSupportedPictureSizes() http://developer.android.com/reference/android/hardware/Camera.Parameters.html#getSupportedPictureSizes()
  2. Camera.Parameters.getSupportedPreviewSizes() http://developer.android.com/reference/android/hardware/Camera.Parameters.html#getSupportedPreviewSizes()

在这里你可以找到一个非常简单的例子:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在设备处于横向时拍摄人像照片 的相关文章

随机推荐