2011-12-05 24 views
8

我想使用相機預覽進行圖像識別。對於我的 目的,我需要預覽分辨率儘可能高 (並且同時向用戶顯示預覽)。如何獲得720p Android相機預覽數據?

我創建了一個Preview類,擴展了SurfaceView並將 PreviewSize設置爲1280x720。我添加了一個PreviewCallBack讓現場 圖片:

camera = Camera.open(); 

parameters = camera.getParameters(); 
parameters.setPreviewSize(1280,720); 

camera.setParameters(parameters); 
byte[] b = new byte[camera.getParameters().getPreviewSize().width * 
    camera.getParameters().getPreviewSize().height * 
    ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat())/8]; 
camera.addCallbackBuffer(b); 
camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback()); 

try { 
camera.setPreviewDisplay(this.getHolder()); 
camera.startPreview() 
} 

我的字節數組b爲1382400字節我 CameraPreviewCallback.onPreviewFrame()函數接收那些1382400個 字節 - 但只有前497664字節包含數據(匹配一個 768x432分辨率(HTC Desire))。我在不同的設備上測試過,所有的顯示分辨率都是 800x480(HTC Desire,LG Optimus 3D,Samsung Galaxy S2,Samsung Galaxy Tab,...)。我的代碼唯一的設備是HTC Desire HD。

有誰知道如何獲得完整的720p分辨率作爲字節 數組? 「某物」似乎降低了預覽分辨率以適合智能手機顯示屏。

問候

Joern

+0

你確定你的手機支持720p嗎? Logcat會說什麼(比如「無法設置分辨率」)? – Lennart

+0

是,所有設備都支持720p作爲預覽尺寸。 Logcat沒有說任何特別的東西 - 它看起來像「某些東西」會默默地降低預覽分辨率。 –

+0

getPreviewSize()返回正確的大小嗎? – Lennart

回答

8

您不能使用相機預覽任何隨機的分辨率。

某些設備僅支持某些分辨率。您可以通過Camera.Parameters.getSupportedPreviewSizes()¹查詢這些信息。如果您的設備在此列表中未返回1280x720,則無法使用它。改爲選擇接近您所需的支持的分辨率。

¹你一般應使用任何分辨率,720p或不

+2

(不幸的是)1280x720p在每個列出的設備列表中。我檢查了SupportedPreviewSizes。 –

2

儘管這是一個老問題之前這樣做,得到的答覆是不變的:支持預覽尺寸的每個設備的列表是不準確的。就我所知,默認的預覽大小總是有效的。其他尺寸似乎在個案基礎上最多可以工作 - 您可以合理確信在屏幕上默認預覽尺寸不會顯示不正確,但僅此而已。特別是,Byte Array不會縮放以適應更大的圖像格式,即使它們「受支持」,只有某些「受支持」的預覽尺寸將以分辨率正確呈現,且不會出現綠色/粉紅色失真。

要知道分辨率是否正確以及onPreviewFrame()中的數據是否合適,唯一可靠的方法是手動測試。