首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何监控android相机当前的FocalLength?

如何监控android相机当前的FocalLength?
EN

Stack Overflow用户
提问于 2014-06-25 17:00:21
回答 2查看 4.8K关注 0票数 1

我有一个SurfaceView,它有一个摄像头预览。我已将相机焦点模式设置为:Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO

并添加了一个AutoFocus回调。当我运行这个应用程序时,我可以看到相机实时调整它的焦距,但是autoFocusCallback只被触发一次,当它被触发时,它总是返回相同的值。(2.95)无论我离焦点物体有多近或多远。

想知道我做错了什么..。是否有可能获得关于实际焦距的实时信息?

我的onSurfaceChanged代码SurfaceView

代码语言:javascript
运行
复制
SurfaceHolder.Callback surfaceHolderListener = new SurfaceHolder.Callback() {

            public void surfaceCreated(SurfaceHolder holder) {
                camera=Camera.open();
            try {
                camera.setPreviewDisplay(previewHolder);
               camera.setDisplayOrientation(90);

            }
                catch (Throwable e){ }
            }
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
            {

                Parameters params = camera.getParameters();
               Rect centralFocusArea = new Rect();
               centralFocusArea.set(holder.getSurfaceFrame().width()/2-10, holder.getSurfaceFrame().height()/2-10, holder.getSurfaceFrame().width()/2+10, holder.getSurfaceFrame().height()/2+10);

               ArrayList<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
               focusAreas.add(new Camera.Area(centralFocusArea, 1000));

                //params.setPreviewSize(width, height);
                params.setPictureFormat(PixelFormat.JPEG);
                params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
               // params.setFocusAreas(focusAreas);
                camera.setParameters(params);

                camera.startPreview();
                camera.autoFocus(new AutoFocusCallback() {

                    @Override
                    public void onAutoFocus(boolean success, Camera camera) {
                        // TODO Auto-generated method stub
                        Log.v("CAMERA", "FOCUS CHANGE:"+camera.getParameters().getFocalLength());
                        camera.getParameters().setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);

                    }
                });

            }
            public void surfaceDestroyed(SurfaceHolder arg0)
            {
                camera.stopPreview();
                camera.release();
            }

        };
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-25 17:17:07

大多数Android实现都没有为焦点距离提供适当的值,尽管参数在Android规范中有很好的定义。一段时间前,我检查了三台不同的相机,但它们都没有提供有用的信息。

票数 0
EN

Stack Overflow用户

发布于 2015-08-17 12:29:02

也许你混淆了两个不同的概念:聚焦距离和焦距。

您似乎对焦距感兴趣,即光学系统具有完美焦距的距离;这取决于您离对焦物体有多远或多近。

相反,焦距是光学系统(即相机镜头)的固有特性,并且在大多数标准移动设备中是固定的(需要有可变焦距的光学变焦能力)。你得到的值2.95是相机的焦距(毫米)。Nexus 7 2013平板电脑有如此长的焦距。

因此,函数getFocalLength()总是给出相同的值,这是完全正常的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24414583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档