android - 在Android中设置相机对焦区域

标签 android focus android-camera

根据几个教程和示例,我想出了下一个算法来将相机焦点设置在特定点上,问题是相机完全忽略了该点并执行正常的整体焦点,而不是我指定的矩形区域.我在算法中还缺少什么吗?这已经在几款搭载 Android 4.0 及更高版本的手机上进行了测试,因此这些设备支持焦点区域 API。请注意,我正在编写的应用程序只能在横向模式下运行。

@Override
public boolean onTouchEvent(final MotionEvent event)
{
    if (event.getAction() == MotionEvent.ACTION_UP)
    {
        float x = event.getX();
        float y = event.getY();
        float touchMajor = event.getTouchMajor();
        float touchMinor = event.getTouchMinor();

        Rect touchRect = new Rect((int)(x - touchMajor / 2), (int)(y - touchMinor / 2), (int)(x + touchMajor / 2), (int)(y + touchMinor / 2));

        this.submitFocusAreaRect(touchRect);
    }
}

private void submitFocusAreaRect(final Rect touchRect)
{
    Camera.Parameters cameraParameters = camera.getParameters();

    if (cameraParameters.getMaxNumFocusAreas() == 0)
    {
        return;
    }

    // Convert from View's width and height to +/- 1000

    Rect focusArea = new Rect();

    focusArea.set(touchRect.left * 2000 / cameraSurfaceView.getWidth() - 1000, 
                      touchRect.top * 2000 / cameraSurfaceView.getHeight() - 1000,
                      touchRect.right * 2000 / cameraSurfaceView.getWidth() - 1000,
                      touchRect.bottom * 2000 / cameraSurfaceView.getHeight() - 1000);

    // Submit focus area to camera

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

    cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
    cameraParameters.setFocusAreas(focusAreas);
    camera.setParameters(cameraParameters);

    // Start the autofocus operation

    camera.autoFocus(this);
}

最佳答案

在 cameraParameters.setFocusAreas(focusAreas); 之前,你应该添加这个:

cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);

关于android - 在Android中设置相机对焦区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17968132/

相关文章:

Android - 支持的图像类型

android - 如何在Android中使用mediastore.audio获取具有音频文件的目录的名称

android - 更新数据库时出现 CursorIndexOutOfBoundsException

java - JSpinner:自动选择焦点

java - 尽管可见,启用为 true,但子 JComponent 不会获得焦点

安卓 : Getting byte[] from Image ID

android - 如何避免将FragmentX绑定(bind)到Fragment

java - 使用 dx.bat 时错误的类文件魔术

linux - bash,查找聚焦窗口的顺序(类似于 alt+tab 菜单)

android - 如何检测android中的用户存在?