Android:相機(jī)開發(fā)

權(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)用此接口

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容