Подтвердить что ты не робот

Камера setFocusAreas() не работает Android 4.0

Я создаю приложение для камеры, которое будет использовать функцию крана для фокусировки, как и многие стандартные приложения для камеры. Сначала я получаю координату (x, y) события касания, а затем передаю это значение в пользовательский интерфейс. Затем я пытаюсь установить область фокусировки, например:

Rect newRect = new Rect(left,top,right, bottom);
Camera.Parameters params = mCamera.mCameraInstance.getParameters();
Camera.Area focusArea = new Camera.Area(newRect, 1000);
List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(focusArea);
params.setFocusAreas(focusAreas);

Однако, похоже, это не имеет никакого эффекта. Итак, я закодировал некоторые значения в прямоугольнике (таким образом, я могу исключить плохие координаты из события касания). В соответствии с документами, он ищет координату в пространстве (-1000, -1000) (вверху слева) до (1000, 1000 )(внизу справа).

Итак, я заменил свой прямоугольник выше на этот:

//should target a 100x100 square in the center of the screen
Rect newRect = new Rect(-50,-50,50, 50);

И все же, кажется, не имеет никакого эффекта. Я знаю, что моя камера поддерживает настройку областей фокусировки, потому что в первую очередь приложение камеры использует его успешно, а также params.getMaxNumFocusAreas() возвращает 1.

Если кто-то использовал это с успехом в прошлом, пожалуйста, дайте мне знать!

Изменить:

Я нашел этот похожий вопрос, который также указывает, что этот API просто не работает на устройствах Android 4.0 и выше (im testing на 4.1.1, Galaxy S3). И тем не менее, приложения для камер на этих устройствах по-прежнему имеют функциональность "коснуться". Что мне не хватает???

4b9b3361

Ответ 1

У меня была эта проблема сегодня:/

И после нескольких часов борьбы я нашел решение!

Странно, но кажется, что настройка фокус-режима на "макро" прямо перед настройкой областей фокусировки решила проблему;)

params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
params.setFocusAreas(focusAreas);
mCamera.setParameters(params);

У меня Galaxy S3 с Android 4.1.2

Я надеюсь, что это сработает для вас:)

Ответ 2

Это не работает для меня ни один, но в любом случае, при настройке rect, убедитесь, что left < right и top < bottom! Вы устанавливаете свой прямоугольник на высоту -100! И, кстати, вы не устанавливаете квадрат 50x50, а 100x-100.

Ответ 3

После просмотра источника источника 4.3 и просмотра API-интерфейса камеры в течение нескольких часов я обнаружил эту функцию:

public final void autoFocus (Camera.AutoFocusCallback cb)

Итак, вы должны иметь возможность добавить несколько строк в свой код:

Rect newRect = new Rect(left,top,right, bottom);
Camera.Parameters params = mCamera.mCameraInstance.getParameters();
Camera.Area focusArea = new Camera.Area(newRect, 1000);
List<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(focusArea);
params.setFocusAreas(focusAreas);

/**
 * ISO changes occurs passively after setting it in the cameraParams. Auto focus
 * parameters that have been set don't take affect until calling Camera.autoFocus()
 */
mCamera.autoFocus(new Camera.AutoFocusCallback()
{
    @Override
    public void onAutoFocus(boolean success, Camera camera)
    {
        Log.d(TAG, "onAutoFocus() " + success);
    }
});