前面我發了兩篇blog,一篇是變焦總結,有錯誤。一篇是surfaceview顯示camera攝像畫面,可以運行,但是setParameters會導致bug,當然我註釋掉了。
在這裏做個糾正:
1.手機支不支持攝像頭變焦
2.系統自帶攝像軟件可以變焦,但是自己編寫的程序不支持變焦,我自己的htc g14 sensation就是這樣滴。
自己編寫的程序是否可以變焦,調用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)
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.
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上。