Android相机参数设置Zoom Ratio()值不符合预期

时间:2012-09-28 01:27:35

标签: android camera zoom augmented-reality

如果我得到一个缩放比例列表:parameters.getZoomRatios(),返回的值是100,114 ... 200(相当于1x 1.14x ... 2.0x缩放),但是相机预览为200(2x缩放),图片放大2倍以上。在样本图像中,1x显示6cm fov,2x放大显示2.5cm ...我预计在2x时3.0cm。

6 cm at 1x (100) zoom 2.5 cm at 2x (200) zoom

我还有另一种解释这些价值观的方法吗?......其他人都看到了吗?或者这个设备/版本是否具体,或者我应该乘以一些常数或其他值(焦距)?我正在尝试将我的相机视图与我的应用程序的渲染视图相匹配,并且当我缩放时,这会弄乱匹配。

代码是标准的:

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

2 个答案:

答案 0 :(得分:3)

调用函数“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]。

例如,如果我想将缩放设置为2X,我将有“parameters.setZoom(20)”(参见原始三星列表),这实际上是一个错误,因为我不会有预期的2倍变焦,但是3倍变焦(参见生成的列表)。

如果您的zoomRatios列表不可信,请尝试生成您自己的zoomRatios列表,计算两个连续缩放比率之间的距离,假设正确返回最小(1X)和最大缩放值。顺便说一下,缩放比率列表的大小也是正确的,因此,为了计算两个连续缩放比率值之间的差异,您可以使用以下公式:(greatZoomRatio - smallestZoomRatio)/ numberOfZoomRatioElements。

答案 1 :(得分:1)

在尝试修复不同手机型号的等效缩放级别时,我也偶然发现了这个问题。比率似乎很有希望,但我放弃使用它们,因为它太不一致了。

作为亚瑟王,我也意识到这些值应该是等距的,只有最后一个值有时并不反映实际的缩放系数。这是我的三星S4的比例: [100,102,104,107,109,112,114,117,120,123,125,128,131,135,138,141,144,148,151,155,158,162,166,170,174,174 ,178,182,186,190,195,200] 这是错误的,因为手机有4倍变焦,但列表不会以400结束!

我没有看到逻辑,所以最后我放弃了。 如果有人能提供解释,我会很感兴趣。 干杯