`
rys5851968
  • 浏览: 155720 次
社区版块
存档分类
最新评论

Android SDK的一个bug------parameters.getFocusDistances无法使用(被拍摄物体和摄像头之间的距离无法测量)

 
阅读更多

这是很早之前我发现的一个问题,当时想利用“焦距”来定位被拍摄物体和手机摄像头之间的距离,注意不是摄像头预览画面里两个点之间的距离,这是个平面距离。本文所说的距离是垂直距离。最终失败,原因是parameters.getFocusDistances返回的值永远是inifinte。手机型号是华为U9200.

下面是测试核心代码:

@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



分享到:
评论

相关推荐

    android-sdk-r24.4.1-windows.zip

    android-sdk-r24.4.1-windows.zip文件是一个包含必要工具、库文件、文档和示例代码的软件包,它允许开发者构建、测试和调试适用于不同安卓设备和平台版本的应用程序。开发者应当保持与最新SDK的同步,以便能够开发出...

    Android SDK (SDK Platforms)-android-33-ext4.zip

    总结来说,"Android SDK (SDK Platforms)-android-33-ext4.zip"是一个包含未来Android版本33中EXT4文件系统相关改进的SDK组件。开发者可以通过这个工具包来提前适应新平台,优化应用性能,并确保其在新版本Android上...

    Android SDK (SDK Platforms)-android-20.zip

    1. **API级别**:API级别是Android版本的重要标识,每个版本都有一个唯一的整数,API级别20对应的是Android 4.2.2。这个级别的提升意味着新的API接口和功能的添加,开发者可以利用这些新接口来实现更丰富的功能。 2...

    Android SDK (SDK Platforms)-android-32.zip

    Android SDK (SDK Platforms)-android-32.zip 是一个包含了Android操作系统第32版本(也称为Android 13)平台开发工具的压缩包。这个压缩文件是Android开发者在构建、测试和调试针对Android 13应用时所必需的核心...

    wechat-sdk-android-without-mta-5.3.1.jar.zip

    微信SDK for Android 5.3.1版本是一个重要的开发工具包,主要针对微信平台的应用程序开发。这个版本的SDK去除了MTA(Mobile Traffic Analysis)模块,因此它可能更适合那些不希望集成移动流量分析功能的开发者。下面...

    android-sdk_r24.4.1-windows.zip

    例如,使用Android Studio(一个基于IntelliJ IDEA的集成开发环境,与SDK紧密集成)编写代码,然后通过SDK的构建工具进行编译和打包。调试过程中,可以使用adb连接物理设备或AVD进行测试,通过Logcat查看日志输出,...

    wechat-sdk-android-without-mta-5.5.8.jar

    新版libammsdk.jar wechat-sdk-android-without-mta-5.5.8.jar

    wechat-sdk-android-without-mta-5.3.1.jar

    微信sdk wechat-sdk-android-without-mta-5.3.1.jar (微信最完整的包)里面包括(app跳转小程序需要的类)

    Android SDK (SDK Platforms)-android-26.zip

    Android SDK (SDK Platforms)-android-26.zip 是一个包含了Android开发所需的重要组件的压缩包,主要针对Android操作系统版本26,也称为Android Oreo(8.0)。这个压缩包是开发者构建、测试和调试Android应用的基础...

    Android SDK (SDK Platforms)-android-24.zip

    总之,Android SDK Platforms-android-24是开发者构建面向Android 7.0系统应用的关键,它包含了一系列新特性和API,使得开发者能够充分利用这些功能,提升应用的质量和用户体验。理解并熟练运用这些平台特性,是开发...

    Android SDK (SDK Platforms)-android-31.zip

    Android SDK (SDK Platforms)-android-31.zip 是一个包含了Android操作系统第31版本(即Android 12)的开发工具包。这个压缩包是开发者在构建、测试和调试针对Android 12应用时必不可少的资源。以下是关于Android ...

    wechat-sdk-android-without-mta-5.5.8.zip

    微信开放平台SDK是微信官方为开发者提供的一套用于在Android平台上进行微信功能集成的开发工具包(SDK)。这个"wechat-sdk-android-without-mta-5.5.8.zip"压缩包包含了版本号为5.5.8的SDK,主要用于实现如分享网页...

    android-sdk_r21-windows.zip

    4. **Android平台**: `android-sdk_r21`代表了Android的一个特定版本,这里的`r21`指的是Release 21,对应的是Android 5.0 Lollipop。每个平台都包含系统库、示例代码、文档等,使得开发者可以针对特定版本的Android...

    Android SDK (SDK Platforms)-android-19.zip

    Android SDK (SDK Platforms)-android-19.zip 是一个包含了Android开发平台版本19的压缩包,主要用于Android开发者在构建、测试和调试针对Android 4.4 KitKat系统应用时使用。这个压缩包提供了必要的API库、工具和...

    Android SDK (SDK Platforms)-android-25.zip

    在本文中,我们将深入探讨Android SDK中的"SDK Platforms"-android-25版本,这个版本代表了Android操作系统的一个特定版本,即Android 7.1 (Nougat)。 一、Android 7.1 (Nougat) 简介 Android 7.1是Android 7.0...

    Android SDK (SDK Platforms)-android-33-ext5.zip

    首先,Android 33是Android操作系统的一个新版本,它带来了许多新特性和性能优化。开发者需要了解这个版本的新API、安全改进以及对用户体验的提升。例如,Android 33可能增加了新的系统服务,改进了权限管理,或者...

    Android SDK (SDK Platforms)-android-35.zip

    Android SDK(Android Software Development Kit)是Google官方为Android应用开发提供的一个综合软件开发工具包。版本35号的Android SDK(SDK Platforms)代表的是该开发工具包所支持的Android系统的具体版本,即API...

    Android SDK (SDK Platforms)-android-34.zip

    Android SDK (SDK Platforms)-android-34.zip 是一个包含了Android操作系统第34版本(也称为Android 13)开发所需平台工具的压缩包。这个压缩文件对于开发者来说至关重要,因为它提供了构建、测试和调试Android应用...

Global site tag (gtag.js) - Google Analytics