Android camara参数getZoomRatio()值与预期不符
作者:互联网
如果我使用以下参数获取缩放比例列表:parameter.getZoomRatios(),则返回值为100,114 … 200(对应于1x 1.14x … 2.0x缩放),但在相机预览中为200(2x缩放),图片显示的放大倍数超过2倍.在示例图像中,在1x处显示6cm的焦点,在2x变焦处显示2.5cm的眼睛…我期望在2x时的3.0cm.
我还有另一种解释这些值的方式吗?…其他人看到了吗?还是此设备/版本特定,还是我应该乘以某个常数或其他值(焦距)?我正在尝试将相机视图与应用程序的渲染视图进行匹配,并且在缩放时,这使匹配变得混乱.
代码在这里是标准的:
public void setZoom(int pZoom)
{
final Camera.Parameters p = this.mCamera.getParameters();
if (p.isZoomSupported())
{
p.setZoom(pZoom);
this.mCamera.setParameters(p);
}
}
public int getZoom( android.hardware.Camera camera)
{
int zoom = 100;
final Parameters p = camera.getParameters();
if (p.isZoomSupported())
{
final List<Integer> zoomRatios = p.getZoomRatios();
final int zoomIndex = p.getZoom();
if (zoomIndex < zoomRatios.size())
{
zoom = zoomRatios.get(zoomIndex);
}
//Log.d("zoom","ix:" + zoomIndex + " z:"+zoom);
}
return zoom;
}
解决方法:
调用函数“ camera.getParameters().getZoomRatios()”似乎是获取相机缩放比例的最安全方法.嗯,是这样,但是-据我所知-它在每个Android设备上的行为方式都不相同.
我已经测试了不同设备上的缩放比例:在华硕上调用getZoomRatios()时,它返回了以下内容:
[100、125、150、175、200、225、250、275、300、325、350、375、400、425、450,
475、500、525、550、575、600、625、650、675、700、725、750、775、800].
在这些缩放比例下,如果您在1倍变焦下测试6.0厘米,那么在2倍变焦下将得到3.0厘米.
但是,三星给我返回了以下列表:
[100、102、104、109、111、113、119、121、124、131、134、138、146、150、155,
159、165、170、182、189、200、213、222、232、243、255、283、300、319、364、400].
这些值有些奇怪,因为在1倍变焦下测试6.0厘米时,如果在2倍变焦下无法达到预期的3.0厘米,则这些值将不正确.当我在设备的标准相机应用程序上验证缩放系数时,我意识到缩放比例必须等距.我改用等距值生成了另一个缩放比例列表:[100、110、120、130、140、150、160、170、180、190、200、210、220、230、240、250、260、270, 280、290、300、310、320、330、340、350、360、370、380、390、400].
例如,如果我要将缩放比例设置为2倍,则将显示“ parameters.setZoom(20)”(请参阅原始的三星列表),这实际上是一个错误,因为我将无法获得预期的2倍.缩放,但3倍缩放(请参见生成的列表).
如果不信任您的zoomRatios列表,请尝试生成您自己的zoomRatios列表,并假定正确返回了最小(1X)和最大缩放值,并计算两个连续缩放比率之间的距离.顺便说一句,缩放比例列表的大小也是正确的,因此要计算两个连续缩放比例值之间的差异,可以使用以下公式:(greatestZoomRatio-minimumZoomRatio)/ numberOfZoomRatioElements.
标签:zoom,augmented-reality,camera,android 来源: https://codeday.me/bug/20191031/1978778.html