2011-11-12 12 views

Odpowiedz

6

Jest to możliwe, gdyż z poziomu API 21. Z dokumentacji (https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#SENSOR_INFO_PHYSICAL_SIZE):

public static końcowego Key SENSOR_INFO_PHYSICAL_SIZE

Fizyczne wymiary pełnej tablicy pikseli. [...]

Jednostki: Milimetry

Używam tego rodzaju kodu. Strzeż się, nie może być więcej niż tylko jednej kamery:

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

Zauważ, że wyjątek CameraAccessException musi zostać złapany.

Nie zapomnij dodać <uses-sdk android:minSdkVersion="21" /> do swojego manifestu.

+1

Doskonałe rozwiązanie, jednak jak uzyskać tę samą wartość w wersjach przed 21 API? – jucajl

+0

Nie znalazłem rozwiązania dla wersji wcześniejszych niż 21 ... – DomTomCat

+0

czy ta metoda jest również zapisana? http://stackoverflow.com/a/41032402/4548520 – user25

0

Łatwo jest uzyskać szerokość i wysokość czujnika aparatu również za pomocą Ap1 Api. Uzyskaj poziomy i pionowy kąt widzenia i ogniskową, a reszta to mała trygonometria.

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

A = kąt widzenia, L = długość ogniskowej, h = wysokość czujnika/2 => tg (A/2) = h/l

dla urządzenia z ogniskowej 1,15 mm poziomy kąt widzenia 54.8 stopni:

szerokość Sensor = tg (54,8/2) * 2 * 1,15 = 1.19mm

Ta wartość jest taka sama z tym, co się stosując metodę DomTomCat wysłana.

Powiązane problemy