使用內建的相機模組拍照或是做影像處理等應用。
Introduction
Camera 官方有提供照相時,要如何操作 class,Camera@Android Developers
- Camera.open() 可取得相機物件
- 使用 getParameters() 取得預設設定值
- 可修改 Parameters 物件,然後再用 setParameters() 去修改相機的設定
- 有需要的話,可以呼叫 setDisplayOrientation() 調整相機取樣的方向
- 相機預覽需要使用 setPreviewDisplay()
- SurfaceHolder 需要完全初始化
- 呼叫 startPreview() 即可開始做相機預覽
- takePicture() 即可做照相的動作
- 照相完,預覽會停止,如果要繼續啟動相機的話,要再呼叫 startPreview()
- stopPreview() 可以停止預覽
- 如果要離開應用程式,必須要呼叫 release()。可以寫在 onPause() 裡,或是在 onResume() 做重新 open()
Required Permission
設定 Mainfest.xml 檔,加入以下兩行,第一行是安裝提示要存取 camera 權限,第二行是加入 camera 功能
<uses-permission android:name="android.permission.CAMERA"/> |
自動對焦的功能
<uses-feature android:name="android.hardware.camera.autofocus" /> |
存檔的權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
Flash
此為 API 5 以上的功能。
閃光燈是 Camera 類別的功能,所以必須先建立 Camera 物件再搭配 Camera.Parameters 以控制 Camera 的設定。
開啟閃光燈的範例:
Camera camera; |
關閉閃光燈的範例:
parameters.setFlashMode(Parameters.FLASH_MODE_OFF); |
切換方法的範例:
String s = p.getFlashMode(); |
注意: 關閉或是切換 Activity 時,一樣要 release(),不然相機功能是不會關閉的。
Preview
Preview 除了相機拍照可以使用外,也可以用在即時影像處理,如 QR Code 掃描。
通常相機的 preview 都會是全螢幕,所以可以先在 Manifest.xml 宣告 Activity。
<activity |
原始來源要 preview 的話,需要一個 SurfaceView 來放它更新的 frames。
<FrameLayout |
Android 預設 preview 的方向是 landscape,就算設定 portrait,它的預覽圖依然還是會是用橫向的方式去取圖,並且填滿 SurfaceView。這時可以設定 setDisplayOrientation(degree)
解決,取樣的圖會以設的 degree 做順時針旋轉。因此如果要做的像一般照相軟體一樣,翻轉並依它的方向去做拍攝的話,就必需要針對目前方向做調整。
這個問題可以寫 static 的 util。
public static void setCameraDisplayOrientation(Activity activity, int cameraId, Camera camera) { |