在某些設備(僅適用於較新的Android)中,支持點測光。您可以使用由AsyncTask等單獨計時器線程觸發的JPEG回調,然後讀取將計量到選定點的EXIF信息。要檢查這是否是可用的,你可以使用:
//on Event Touch callback on your SurfaceView
x=event.getX();
y=event.getY();
params=camera.getParameters();
... //check for rotation, calculate focus point (x, y: -1000, 1000)
if(params.getMaxNumMeteringAreas() > 0){
//draw a meter area, however big you want, 1000 is weight (0-1000)
Camera.Area ca=new Area(new Rect(x-25, y-25, x+25, y+25), 1000);
List<Camera.Area> areas=new ArrayList<Area>();
areas.add(ca);
params.setFocusAreas(areas);
params.setMeteringAreas(areas);
camera.setParameters(params);
}else{
//process the Bitmap and do the below...
}
在舊設備上(如果你想向後兼容),你仍然可以設置對焦點(存儲在您的代碼),然後執行像素的平均值圍繞這個焦點(我使用寬度和高度的6%)與EXIF值相比較(如果它更暗,降低曝光等)。爲此,您可能希望使用按鍵式按鈕(因爲較舊的設備在進行JPEG回調時會滯後)。
average=((r+g+b)/3-128)/256
myEV=myEV+myEV*average
使用這兩種方法,只是確保你正在閱讀的圖像被正確地旋轉(你可以把它變成一個ImageView的和比較它的預覽檢查)。
從EV你可以相對容易地轉換爲勒克斯或腳蠟燭(或任何你喜歡的測量)。
這應該是一個評論,如果我錯了請留下它,否則,請張貼它,並刪除您的答案。 –
據我所知,這是問題的明確答案:目前沒有API支持,但有些人使用EXIF數據已經成功。 –
我沒有使用Android的經驗(我使用它!),但據我所能/可以告訴,你在你的答案中提出另一個問題,而不是提供一個。 –