Android相机对焦模式

Raj*_*epe 15 android byte focus android-intent android-camera

我正在尝试制作一个自定义相机应用程序,我想让用户可以在此应用程序中选择焦点模式.

对焦模式是自动和触摸对焦

如果我们想在相机中使用触摸式对焦,那么如何才能开始?

Zit*_*hen 16

该功能取决于软件/硬件/制造,我的建议是你首先找到像Android 4.x一样闪过Galaxy Nexus的手机,然后尝试android.hardware.Camera.Parameters.getMaxNumFocusAreas()就可以了,如果返回值大于零然后你很幸运,然后可以使用setFocusAreas()来实现"触摸聚焦"功能.

为什么:

在旧的Android版本中,没有用于设置焦点区域的公共API.虽然许多制造商设法创建自己的API和实现,但他们不会分享.

Android在API级别14中引入了重点领域API,但手机制造商可能会选择不实施它(即选择坚持自己的解决方案).要检查API是否受支持,您可以先调用getMaxNumFocusAreasa(),如果它返回一个正整数,表示手机确实实现了API,您可以继续在相机应用程序中启用"触摸焦点"功能.(API也是"面部检测"功能的推动者之一,当识别出面部时,相机应用程序使用API​​让相机自动对焦于它们.)

您可以参考vanilla Android Camera应用程序源代码,了解如何正确使用API​​.

参考文献:

  1. Android Camera API

getMaxNumFocusAreas()

setFocusAreas()

  1. Android 4.0相机应用源代码

mInitialParams.getMaxNumFocusAreas()

mParameters.setFocusAreas()

问候

陈子腾


sup*_*ser 8

试试这个:

public void takePhoto(File photoFile, String workerName, int width, int height, int    quality) {
if (getAutoFocusStatus()){
    camera.autoFocus(new AutoFocusCallback() {
        @Override
        public void onAutoFocus(boolean success, Camera camera) {
            camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    }); 
}else{
    camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
Run Code Online (Sandbox Code Playgroud)

但是,我也看到了这个,可能更准确:

if (getAutoFocusStatus()){
    camera.autoFocus(new AutoFocusCallback() {
        @Override
        public void onAutoFocus(boolean success, Camera camera) {
           if(success) camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    }); 
}else{
    camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
Run Code Online (Sandbox Code Playgroud)

最后一个在聚焦成功完成时拍摄照片.它适用于QR扫描码.我认为这同样适用于这种情况.


Raj*_*epe 5

它已经实现但是如果我想添加触摸来聚焦,可以修改它吗?

public void takePhoto(File photoFile, String workerName, int width, int height, int    quality) {
    if (getAutoFocusStatus()){
        camera.autoFocus(new AutoFocusCallback() {
            @Override
            public void onAutoFocus(boolean success, Camera camera) {
                camera.takePicture(shutterCallback, rawCallback, jpegCallback);
            }
        }); 
    }else{
        camera.takePicture(shutterCallback, rawCallback, jpegCallback);
    }

    this.photoFile = photoFile;
    this.workerName = workerName;
    this.imageOutputWidth = width;
    this.imageOutputHeight = height;
}

public void takePhoto(File photoFile, int width, int height, int quality) {
    takePhoto(photoFile, null, width, height, quality);
}
Run Code Online (Sandbox Code Playgroud)

  • 什么`getAutoFocusStatus()`方法呢? (4认同)