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