Android Camera源碼分析

fmms 12年前發布 | 76K 次閱讀 Android Android開發 移動開發

android通過android.hardware.Camera類來控制攝像頭設備的,要使用只有通過android.hardware.Camera.open()來打開,這樣就會創建一個新的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

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!