9

我将通过打开相机来设置我的 Android 应用程序,并通过触摸相机中的点来启用手动对焦。相机可以重新对焦到我指向屏幕的位置。你能告诉我我应该从修改方法或哪个组件开始吗?

下面是我的代码:

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

3 回答 3

14

虽然这个答案没有显示如何专注于单个区域,但它在展示如何准确地聚焦相机开始时绝对有用。

这是我所做的。这适用于我的设备(HTC 的 Droid DNA),内置于 Android Studio

在两者OnSurfaceChanged()OnSurfaceCreated(),我都有以下代码:(mCamera是我的私人Camera对象)

        mCamera.stopPreview();
        Camera.Parameters p = mCamera.getParameters();
        p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);

        mCamera.setParameters(p);
        mCamera.setPreviewDisplay(surfaceHolder);
        mCamera.startPreview();
        mCamera.autoFocus(null);

在构造函数中,您必须放置

        setFocusable(true);
        setFocusableInTouchMode(true);

这将允许您接收焦点事件。至于抓他们……

 public boolean onTouchEvent(MotionEvent event){
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        Log.d("down", "focusing now");

        mCamera.autoFocus(null); 
    }

    return true;
}
于 2014-02-19T04:50:10.920 回答
1

您是否尝试过使用 setFocusAreas() 设置用户触摸的焦点区域?

于 2013-05-22T06:27:25.093 回答
0

这里的关键是调用 camera.autoFocus(autoFocusCallBack) 并且在我们聚焦方法 autofocusCallback.onAutoFocus(boolean success, Camera camera) 被调用之后 – 调用 camera.takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg )

查看更多:http ://achorniy.wordpress.com/2009/12/29/how-to-use-autofocus-in-android/

或者

在表面改变和预览之前,您可以使用自动对焦设置,它会自动设置焦距,然后开始预览,然后自动对焦显示的任何内容...

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

// Set camera properties first
Camera.Parameters parameters = camera.getParameters();
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
        camera.setParameters(parameters);

camera.startPreview();

camera.autoFocus(null);

}

信用:在哪里放置自动对焦类android相机

于 2012-10-12T02:02:51.367 回答