读书人

android 多媒体跟相机详解十

发布时间: 2012-08-17 02:08:34 作者: rapoo

android 多媒体和相机详解十
检测可用的特性



图1.红线表示在相机预览中指定一个Camera.Area所在的坐标系.蓝框表示一个相机区域的位置和形状,其坐标值为:333,333,667,667.

此坐标系的边界总是与相机预览图像的外边界一至,并且不会随着变焦变大或变小.同样的,使用Camera.setDisplayOrientation()旋转预览图像也不会改变做标系.

人脸检测

对于包含人的图像,脸往往是图像中最重要的部分,并且在拍照时,脸部被用于对焦和白平衡.Android 4.0 (API Level 14)框架提供了识别面部的和跟据其计算图像设置的API们.

注:当启用面部检测特性时,setWhiteBalance(String), setFocusAreas(List) 和setMeteringAreas(List)不再起作用.


使用面部检测特性通常需要以下几步:

l 检查设备是否支持面部检测

l 创建一个面部检测监听器

l 添加面部检测监听器到你的相机对象.

l 预览开始后开始面部检测(并且每次重启预览后同样)

  面部检测特性不是在所有的设备上都支持.你可以调用getMaxNumDetectedFaces()来检测是否支持.

为了接收到面部检测的通知并作出响应,你的相机应用中必须为面部检测事件设置一个监听器.所以你必须创建一个监听类,它实现Camera.FaceDetectionListener接口,如下代码所示:

public void surfaceCreated(SurfaceHolder holder) {    try {        mCamera.setPreviewDisplay(holder);        mCamera.startPreview();        startFaceDetection(); // start face detection feature    } catch (IOException e) {        Log.d(TAG, "Error setting camera preview: " + e.getMessage());    }}public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {    if (mHolder.getSurface() == null){        // preview surface does not exist        Log.d(TAG, "mHolder.getSurface() == null");        return;    }    try {        mCamera.stopPreview();    } catch (Exception e){        // ignore: tried to stop a non-existent preview        Log.d(TAG, "Error stopping camera preview: " + e.getMessage());    }    try {        mCamera.setPreviewDisplay(mHolder);        mCamera.startPreview();        startFaceDetection(); // re-start face detection feature    } catch (Exception e){        // ignore: tried to stop a non-existent preview        Log.d(TAG, "Error starting camera preview: " + e.getMessage());    }}

注:记住在调用startPreview()后要调用此函数.不要试图在你的应用的actvitiy的onCreate()中启动脸部检测,因为此时预览还没有启动呢.






读书人网 >Android

热点推荐