Camera系列糾正

前面我發了兩篇blog,一篇是變焦總結,有錯誤。一篇是surfaceview顯示camera攝像畫面,可以運行,但是setParameters會導致bug,當然我註釋掉了。

在這裏做個糾正:

1.手機支不支持攝像頭變焦

2.系統自帶攝像軟件可以變焦,但是自己編寫的程序不支持變焦,我自己的htc g14 sensation就是這樣滴。

3.系統自帶攝像軟件可以變焦,但是自己編寫的程序支持變焦,


自己編寫的程序是否可以變焦,調用Log.d(TAG, "max zoom:"+camera.getParameters().getMaxZoom());如果是0,則不讓你變焦的

與Log.d(TAG, "smoothZoom:"+camera.getParameters().isSmoothZoomSupported());
    Log.d(TAG, "supportzoom:"+camera.getParameters().isZoomSupported());

這個輸出無關。

我的g14,soomth zoom 結果false

zoomSupport 結果爲true,但是camera.getParameters().getMaxZoom()結果爲0 ,不讓你變焦。

至於調用

stopSmoothZoom() startSmoothZoom(int value)

則必須This method is supported if isSmoothZoomSupported() is true.

sdk文檔描述。

注意api 是8,api爲7當然不編譯了。

至於變焦設置,sdk文檔描述:

public void setZoom (int value)

Since: API Level 8

Sets current zoom value. If the camera is zoomed (value > 0), the actual picture size may be smaller than picture size setting. Applications can check the actual picture size after picture is returned from Camera.PictureCallback. The preview size remains the same in zoom. Applications should check isZoomSupported() before using this method.

但是,g14 sensation的情況是isZoomSupported()  是true,但是maxzoom 爲0,這肯定就不能變了。


第二個;參數設置問題:

			Camera.Parameters parameters = camera.getParameters();
			/* 設置預覽照片的大小,此處設置爲全屏 */
//			WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); // 獲取當前屏幕管理器對象
//			Display display = wm.getDefaultDisplay();      				     // 獲取屏幕信息的描述類
//			parameters.setPreviewSize(display.getWidth(), display.getHeight());          // 設置
			parameters.setPreviewSize(200, 200); 
			/* 每秒從攝像頭捕獲5幀畫面, */
			parameters.setPreviewFrameRate(5);
			/* 設置照片的輸出格式:jpg */
			parameters.setPictureFormat(PixelFormat.JPEG);
			/* 照片質量 */
			parameters.set("jpeg-quality", 85);
			/* 設置照片的大小:此處照片大小等於屏幕大小 */
//			parameters.setPictureSize(display.getWidth(), display.getHeight());
			parameters.setPictureSize(200, 200);
			/* 將參數對象賦予到 camera 對象上 */
//			camera.setParameters(parameters);

這段代碼有問題,當然報bug的地方我都註釋了
//			camera.setParameters(parameters);
如果不註釋:

ERROR/QualcommCameraHardware(1242): Invalid preview size requested: 480x800
ERROR/QualcommCameraHardware(1242): virtual android::status_t android::QualcommCameraHardware::setParameters(const android::CameraParameters&): 2922, rc = -22
ERROR/QualcommCameraHardware(1242): Invalid picture size requested: 480x800
ERROR/QualcommCameraHardware(1242): virtual android::status_t android::QualcommCameraHardware::setParameters(const android::CameraParameters&): 2923, rc = -22
ERROR/AndroidRuntime(5925): FATAL EXCEPTION: main
ERROR/AndroidRuntime(5925): java.lang.RuntimeException: setParameters failed
ERROR/AndroidRuntime(5925): at android.hardware.Camera.native_setParameters(Native Method)
ERROR/AndroidRuntime(5925): at android.hardware.Camera.setParameters(Camera.java:914)
ERROR/AndroidRuntime(5925): at cn.edu.wtu.CameravedioActivity$SurfaceViewCallback.surfaceCreated(CameravedioActivity.java:190)
log給出了原因:參數設置不合法,一看preview size非法,picture size非法

g12 測試 log

既然preview size非法,picture size非法,總有合法的,和支持的吧,於是乎,我查看sdk文檔:

Camera.Parameters

List<Camera.Size> getSupportedPreviewSizes()
List<Camera.Size> getSupportedPictureSizes()

然在看看其他的支持的參數:

List<Camera.Size> getSupportedVideoSizes()
List<int[]> getSupportedPreviewFpsRange()
Gets the supported preview fps (frame-per-second) ranges.
List<Integer> getSupportedPreviewFrameRates()
List<Integer> getSupportedPictureFormats()
等等。迴歸正題:

支持的size可以遍歷出來,然後取一個適合自己屏幕的size就可以了,list存取的是Camera.size類:


好了,糾正過來了,弄了一整天啊,下一篇將這些糾正過來應用到自己的小demo上。








發佈了213 篇原創文章 · 獲贊 21 · 訪問量 72萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章