2011-11-12 54 views

回答

6

它是可能的,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" />添加到您的清單。

+1

但是,如何在21 API之前的版本中獲得相同的值? – jucajl

+0

我沒有找到適用於21之前版本的解決方案... – DomTomCat

+0

這個方法是否也寫入? http://stackoverflow.com/a/41032402/4548520 – user25

0

用Camera1 Api也可以輕鬆獲得相機傳感器的寬度和高度。獲得水平和垂直視角和焦距,其餘爲小三角。

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

A =來看,升角=焦距,H =傳感器的高度/ 2 =>黃褐色(A/2)= H/L

對於我的設備與焦距1.15毫米和水平的視圖54.8度的角度:

傳感器寬度= TAN(54.8/2)* 2 * 1.15 =1.19毫米

該值是相同的與我所得到的使用方法DomTomCat張貼。

相關問題