使用Camera类(1)

可以使用Android中的Camera类访问该设备上的摄像头硬件。它使我们能够真正捕获图像,并通过其嵌套的Camera.Parameters类更改不同的属性设置,例如是否应该将闪光灯激活以及如何设置白平衡的值。

http://developer.android.com/reference/android/hardware/Camera.html

2.1.1  CAMERA权限

为了使用Camera类捕获图像,需要在AndroidManifest.xml文件中指定必需的CAMERA权限。

<uses-permission android:name="android.permission.CAMERA"/>

2.1.2  预览Surface

同样,在开始使用摄像头之前,还需要创建某种类型的Surface(表面),使得Camera应用程序能够在其上绘制取景器(viewfinder)或预览图像。Surface是Android中的一个抽象类,表示绘制图形或图像的位置。提供一个绘图Surface的简单方法是使用SurfaceView类。SurfaceView是在标准视图中提供Surface的具体类。

为了在布局中指定SurfaceView,只须在任何普通的布局XML中使用<SurfaceView />元素。以下是一种基本的布局,其仅仅在用于摄像头预览的LinearLayout(线性布局)中实现一个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>

为了在代码中实现通过Camera类使用此SurfaceView,需要添加一个SurfaceHolder类。SurfaceHolder类可以作为Surface上的一个监控器,并且通过回调提供接口,从而让我们知道什么时候创建、销毁或更改Surface。同时,SurfaceView类还提供了一个getHolder方法,用于获得一个对应其Surface的SurfaceHolder对象。

以下是一个代码片段,其访问在布局XML中声明的SurfaceView,并从中获得一个SurfaceHolder。同时,它还设置该Surface是一个“推送”类型的Surface,这意味着在Surface本身的外部维持绘图缓冲区。在这种情况下,该缓冲区由Camera类管理。“推送”类型的Surface是Camera预览所需的Surface。

读书导航