Android SDK的一个bug------parameters.getFocusDistances无法使用(被拍摄物体和摄像头之间的距离无法测量)
2013-02-09 19:46
495 查看
这是很早之前我发现的一个问题,当时想利用“焦距”来定位被拍摄物体和手机摄像头之间的距离,注意不是摄像头预览画面里两个点之间的距离,这是个平面距离。本文所说的距离是垂直距离。最终失败,原因是parameters.getFocusDistances返回的值永远是inifinte。手机型号是华为U9200.
下面是测试核心代码:
但奇怪的是得到的参数一直是infinite!!!国外的http://code.google.com/p/android/issues/detail?id=14341也发现了同样的bug。
后查资料,早期的手机带有红外,通过发射红外可以测出来被拍摄物体和手机之间的距离。以前的相机的聚焦算法用的是物理算法也就是指的这。现代的大多通过软件聚焦,比如计算出人脸核心区域以此聚焦。但这些算法都是相机厂家的机密哦!!!但android手机里既然提供这个api理论上是可以获得距离的,只能说是个bug了!
参考:http://stackoverflow.com/questions/6401370/camera-focus-distances
-------------------------------------转载请注明作者yanzi1225627
下面是测试核心代码:
@Override public void onAutoFocus(boolean success, Camera camera) { //READ FOCUS DISTANCES HERE Camera.Parameters parameters = camera.getParameters(); float[] distances = new float[3]; if (success) { // Only available with Android 9 (2.3) // Focus Mode is always reported as auto but // distances do not appear to be updating // always: 0.1, 1.2, Infinity, (on my device it's 0,0,0) Log.d("Focus Mode: ", parameters.getFocusMode()); parameters.getFocusDistances(distances); Log.d("focus distance near", Float.toString(distances[0])); Log.d("focus distance optimum", Float.toString(distances[1])); Log.d("focus distance far", Float.toString(distances[2])); } }或者在surfaceCreate函数里测试自动聚焦前的参数,以此对比上者:
@Override public void surfaceCreated(SurfaceHolder holder) { Log.e(getClass().getSimpleName(), "surfaceCreated"); camera = Camera.open(); Camera.Parameters parameters = camera.getParameters(); float[] distances = new float[3]; Log.d("Focus Mode: ", parameters.getFocusMode()); parameters.getFocusDistances(distances); Log.d("focus distance 0", Float.toString(distances[0])); Log.d("focus distance 1", Float.toString(distances[1])); Log.d("focus distance 2", Float.toString(distances[2])); }
但奇怪的是得到的参数一直是infinite!!!国外的http://code.google.com/p/android/issues/detail?id=14341也发现了同样的bug。
后查资料,早期的手机带有红外,通过发射红外可以测出来被拍摄物体和手机之间的距离。以前的相机的聚焦算法用的是物理算法也就是指的这。现代的大多通过软件聚焦,比如计算出人脸核心区域以此聚焦。但这些算法都是相机厂家的机密哦!!!但android手机里既然提供这个api理论上是可以获得距离的,只能说是个bug了!
参考:http://stackoverflow.com/questions/6401370/camera-focus-distances
-------------------------------------转载请注明作者yanzi1225627
相关文章推荐
- win8相机应用无法使用摄像头导致无法拍摄
- 一个无法使用 GetGraphics() 的问题
- vs2008beta2中Linq2Sql的一个bug:无法使用XmlMappingSource
- bootstrap的popover插件在focus模式时在Safari浏览器无法使用的bug解决方案
- C++设计一个无法被继承且能正常使用的类
- 一个环形公路,上面有N个站点,A1, ..., AN,其中Ai和Ai+1之间的距离为Di,AN和A1之间的距离为D0。 高效的求第i和第j个站点之间的距离,空间复杂度不超过O(N)。
- Idea2016.3版本J2EE相关Plugins显红色导致相关组件无法使用的Bug
- tp框架 一个简单的函数 使用I()获取get和post
- 写一个程序用来查询手机号码的归属地(使用的是HttpURLConnection的get提交方式)
- 在android 两个类之间 get,set方法传参使用
- 有一个VLAN上无法使用策略路由
- 在ubuntu中使用apt-get install 安装软件时出现无法获得锁
- linux 无法使用 sudo apt-get install ****
- 使用js实现两点之间距离计算功能
- Mac下使用 you-get 来下载视频网站上的视频以及相关bug处理
- IE9的一个BUG:propertychange和input事件在拖拽 / 剪切 / 删除时无法触发
- 使用GET实现一个简单的登入界面
- 使用RecyclerView实现QQ空间广告位一个位置两个图时偶遇bug
- g++里使用常静态成员变量的一个BUG
- nvd3使用(1)——多线图中的一个很隐蔽的bug