【Android】Camera 使用浅析
Camera的簡單使用淺析
由于最近工作上用到android.hardware.Camera這個類,于是簡單的學習了一些基本用法。?
首先注意:Camera這個類在API21以后就不推薦使用了,官方提供了一個新的類名叫:Camera2,其中包含了新的回調機制,感興趣的朋友可以仔細研究研究。?
Camera官方API Guide:無墻又懶得打開本地doc的朋友請戳:?
http://www.android-doc.com/guide/topics/media/camera.html
其中描述了使用Camera用以拍照或者攝像的步驟:?
1. 從open (int cameraId)獲取Camera的實例,在Android2.3以后可以傳入相應的cameraId值來開啟所選相機。注意:使用前需要調用getNumberOfCameras ()方法以獲取當前設備擁有攝像頭數量以確保設備擁有多枚攝像頭可用;?
2. 如需要的話,可以先調用getParameters()獲取當前(默認)的settings,并定義Camera.Parameters對象,調用setParameters(Camera.Parameters)來進行Camera的配置。例如setWhiteBalance(String) 、setFocusMode(String value)等,之后需要跟上setParameters(Camera.Parameters)以確保設置成功;?
3. 調用setDisplayOrientation(int)旋轉屏幕,因為在Portrait模式下,攝像頭采集的圖像是逆時針旋轉90度的。注意:該方法僅僅對于屏幕顯示(也就是UI)有影響,不會影響攝像頭采集的原始幀,所以如果使用onPreviewFrame(byte[] data, Camera)這個方法獲取原始幀做Rotate的朋友,請不要在此類的官方API中再浪費時間了。?
4. 將完全初始化的SurfaceHolder傳入到setPreviewDisplay(SurfaceHolder)中,沒有surface的話,相機不會開啟preview預覽;?
5. 調用startPreview()用以更新preview的surface,必須要在拍照之前start Preview;?
6. 接著,調用takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)方法用以拍照,callback會提供圖像數據;?
7. 拍照后,preview display會停止,如果需要的話,再次使用startPreview()用以take more photos;?
8. 調用stopPreview()停止preview surface的更新;?
9. 調用release()方法用以釋放相機的控制權,不然會導致之后使用攝像頭的應用(包括本應用)打開攝像頭的時候Crash。并且一般來說APP都應該在onPause()之后立刻進行release()的操作。
關于Camera的幾個注意事項:
先說說我踩的坑:?
- 關于攝像頭采集原始幀的方向問題:如果需要用到原始幀的朋友應該知道,Android(這里說的是API21以下)的相機采集方向始終都是landscape模式。所以官方提供的幾個旋轉的方法如:setDisplayOrientation(int), setCameraDisplayOrientation(), changeOrientationListener()等?都對onPreviewFrame中的數據沒有影響的。)
官方說明:This doesnot affect the order ofbyte array passed in?onPreviewFrame(byte[], Camera), JPEG pictures, or recorded videos. This method isnot allowed to be called during preview.
轉載于:https://www.cnblogs.com/raomengyang/p/5793098.html
總結
以上是生活随笔為你收集整理的【Android】Camera 使用浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: apache限制php上传大小修改
- 下一篇: 怎么进行泰山地区的生态环境监测?