Android Camera源碼分析
android提供了一些接口來給予回調,控制Camera的狀態,
分別是:
1.android.hardware.Camera.ErrorCallback:攝像頭出錯的時候調用,這個接口具有一個void onError(int error,Camera camera)函數;其中,
前者表示數據類型,取值是Camera類中的常量CAMERA_ERROR_UNKNOWN或者是 CAMERA_ERROR_SERVICE_DIED;
前者是不明錯誤,后者是表示服務已經關閉,
在這種情況下需要釋放當前的Camera對象,然后再初 始化一個。
2.android.hardware.camera.PreviewCallback:在圖像預覽時調用,這個接口有一個void onPreviewFrame(byte[] data,Camera camera);參數data為每幀圖像的數據流。我們可以根據實際需要來實現這個接口。
3.android.hardware.Camera.ShutterCallback:在圖像預覽的時候調用,這個接口具有一個void onShutter();
可以在改函數中通知用戶快門已經關閉,例如播放一個聲音。
4.android.hardware.Camera.PictureCallback:當拍攝相片的時候調用,該接口具有一個void onPictureTaken(byte[] data,Camera camera)函數;參數和預覽的一樣。在android中主要有三個類實現了這個接口,分別是PostViewPictureCallback、 RawPictureCallback、JepgPictureCallback。我們可以根據需要定義自己需要的類。
5.android.hardware.Camera.AutoFocusCallback:當自動對焦時候調用,該接口具有一個void onAutoFocus(boolean success,Camera camera)函數;
6.還提供了放大縮小的監聽器android.hardware.Camera.OnZoomChangeListener。
private final class ZoomListener implements android.hardware.Camera.OnZoomChangeListener {
public void onZoomChange(int value, boolean stopped, android.hardware.Camera camera) ;
當取得照片的數據流后可以通過BitmapFactory的decodeByteArray()函數來解析圖片。
另外還可以通過Camera對象的getParameters()函數來得到一個android.hardware.Camera.Parameters 對象,Parameters提供了一些接口來設置Camera的屬性:
1.setPictureFormat(int pixel_format):設置圖片的格式,其取值為PixelFormat YCbCr_420_SP、PixelFormatRGB_565或者PixelFormatJPEG。
2.setPreviewFormat(int pixel_format):設置圖片的預覽格式,取值如上。
3.setPictureSize(int width,int height):設置圖片的高度和寬度,單位為像素。
4.setPreviewSize(int width,int height):設置預覽的高度和寬度,取值如上。
5.setPreviewFrameRate(int fps):設置圖片預覽的幀速。 在設置好Camera的參數后,可以通過函數void startPreview()開始預覽圖像、void stopPreview()結束預覽,通過autoFocus(AutoFocusCallback cb)來自動對焦,最后可以通過takePicture(ShutterCallback shutter, PictureCallback raw, PictureCallback jpeg)函數來拍照。
該函數有三個參數,分別為快門回調接口、原生圖像數據接口和壓縮格式圖片數據接口。
如果數據格式不存在的話數據流為空,如果不需要 實現這些接口則這些參數取值可以為null。
來自:http://blog.csdn.net/itachi85/article/details/6759975