可以使用Android中的Camera類訪問該設(shè)備上的攝像頭硬件。它使我們能夠真正捕獲圖像,并通過其嵌套的Camera.Parameters類更改不同的屬性設(shè)置,例如是否應(yīng)該將閃光燈激活以及如何設(shè)置白平衡的值。
http://developer.android.com/reference/android/hardware/Camera.html
2.1.1 CAMERA權(quán)限
為了使用Camera類捕獲圖像,需要在AndroidManifest.xml文件中指定必需的CAMERA權(quán)限。
<uses-permission android:name="android.permission.CAMERA"/>
2.1.2 預(yù)覽Surface
同樣,在開始使用攝像頭之前,還需要創(chuàng)建某種類型的Surface(表面),使得Camera應(yīng)用程序能夠在其上繪制取景器(viewfinder)或預(yù)覽圖像。Surface是Android中的一個抽象類,表示繪制圖形或圖像的位置。提供一個繪圖Surface的簡單方法是使用SurfaceView類。SurfaceView是在標(biāo)準(zhǔn)視圖中提供Surface的具體類。
為了在布局中指定SurfaceView,只須在任何普通的布局XML中使用<SurfaceView />元素。以下是一種基本的布局,其僅僅在用于攝像頭預(yù)覽的LinearLayout(線性布局)中實(shí)現(xiàn)一個SurfaceView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<SurfaceView android:id="@+id/CameraView" android:layout_width=
"fill_parent" android:layout_height="fill_parent"></SurfaceView>
</LinearLayout>
為了在代碼中實(shí)現(xiàn)通過Camera類使用此SurfaceView,需要添加一個SurfaceHolder類。SurfaceHolder類可以作為Surface上的一個監(jiān)控器,并且通過回調(diào)提供接口,從而讓我們知道什么時候創(chuàng)建、銷毀或更改Surface。同時,SurfaceView類還提供了一個getHolder方法,用于獲得一個對應(yīng)其Surface的SurfaceHolder對象。
以下是一個代碼片段,其訪問在布局XML中聲明的SurfaceView,并從中獲得一個SurfaceHolder。同時,它還設(shè)置該Surface是一個“推送”類型的Surface,這意味著在Surface本身的外部維持繪圖緩沖區(qū)。在這種情況下,該緩沖區(qū)由Camera類管理?!巴扑汀鳖愋偷腟urface是Camera預(yù)覽所需的Surface。