權限
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
//自動對焦的權限
<uses-feature android:name="android.hardware.camera.autofocus" />
通過surfaceView顯示系統(tǒng)攝像頭
1晴叨,設置SurfaceViewCallback()監(jiān)聽surfaceview的狀態(tài)
surfaceView.getHolder().addCallback(...)
2初厚,在callback中的各個方法里面牵啦,操作相機
在surfaceCreated(SurfaceHolder holder)方法中創(chuàng)建相機
camera = android.hareware.Camera.open();
//這個方法必須在startPreview方法前調用
camera.setPreviewDisplay(holder);
android.hardware.Camera.Parameters parameters = camera.getParameters();
//一些設置,可以不設
//分辨率
parameters.setPreviewSize(200, 200);
//每秒從攝像頭捕獲5幀畫面
parameters.setPreviewFrameRate(20);
//照片輸出格式
parameters.setPictureFormat(PixelFormat.JPEG);
camera.setParameters(parameters);
//開啟前置攝像頭
camera.startPreview();
在surfaceview銷毀的時候釋放攝像頭
camera.stopPreview();
camera.release();
拍照
拍照使用camera.tackPiture()這個方法彭羹。當調用camera.takePiture()之后,camera就會關閉預覽憋活,這時候需要重新調用startPreview()來開啟預覽橱乱。
tackPicture()需要傳入三個參數(shù)茶宵,分別得到拍照瞬間的回調,沒有壓縮過的圖片數(shù)據(jù)搪桂,jpeg的圖片數(shù)據(jù)。如果不需要對圖片進行處理,可以直接使用null代替。
//后兩個參數(shù)都是一個返回byte[]的回調。byte[]可以自行轉換為圖片。
takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg)
- 拍照得到的圖片不會自動存儲哦嫂冻,要自己把照片保存到本地。
自動對焦
autoFocus(),這個方法必須在startPreview和stopPreview()中間。
autoFocus()會提供一個回調接口钞支,當對焦成功后馍刮,會調用此接口