Как получить размер датчика камеры на устройстве Android?

Кто-нибудь может знать, как получить размер сенсора камеры в устройстве Android?

Спасибо


person SBJ    schedule 12.11.2011    source источник


Ответы (2)


Это возможно, начиная с уровня API 21. Из документации (https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#SENSOR_INFO_PHYSICAL_SIZE):

общедоступный статический окончательный ключ SENSOR_INFO_PHYSICAL_SIZE

Физические размеры полного массива пикселей. [...]

Единицы: миллиметры

Я использую такой код. Осторожно, может быть больше одной камеры:

import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;

private SizeF getCameraResolution(int camNum)
{
    SizeF size = new SizeF(0,0);
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    try {
        String[] cameraIds = manager.getCameraIdList();
        if (cameraIds.length > camNum) {
            CameraCharacteristics character = manager.getCameraCharacteristics(cameraIds[camNum]);
            size = character.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE);
        }
    }
    catch (CameraAccessException e)
    {
        Log.e("YourLogString", e.getMessage(), e);
    }
    return size;
}

Обратите внимание, что исключение CameraAccessException должно быть перехвачено.

Не забудьте добавить <uses-sdk android:minSdkVersion="21" /> в свой манифест.

person DomTomCat    schedule 22.05.2015
comment
Идеальное решение, однако, как получить такое же значение в версиях до 21 API? - person jucajl; 19.07.2016
comment
этот метод тоже пишет? stackoverflow.com/a/41032402/4548520 - person user25; 13.03.2017
comment
Кажется, это работает неправильно на некоторых устройствах. Я получаю неправильные углы камеры при использовании этого размера информации датчика для расчета. Только для некоторых устройств я получаю одинаковые результаты при использовании Camera2 API и Camera Legacy API. - person user924; 28.03.2019

Также легко получить ширину и высоту сенсора камеры с помощью Camera1 Api. Получите горизонтальный и вертикальный угол обзора и фокусное расстояние, а остальное — небольшая тригонометрия.

Camera.Parameters params = mCamera.getParameters();
focalLength = params.getFocalLength();
horizontalViewAngle = params.getHorizontalViewAngle();
verticalViewAngle = params.getVerticalViewAngle();

A = угол обзора, l = фокусное расстояние, h = высота сенсора/2 => tan(A/2) = h/l

Для моего аппарата с фокусным расстоянием 1,15 мм и углом обзора по горизонтали 54,8 градуса:

Ширина сенсора = tan(54,8/2)*2*1,15 = 1,19 мм

Это значение совпадает с тем, что я получаю, используя опубликованный метод DomTomCat.

person Thracian    schedule 08.12.2016