Android5.0之后,Android.hardware.Camera被废弃(下面称为Camera1),由Android.hardware.Camera2代替。Camera2支持RAW输出,可以调节曝光、对焦模式、快门等,功能比原先Camera1强大。
1.Camera1
Camera1使用步骤如下。
(1)调用Camera.open(),打开相机,默认为后置相机,可以根据摄像头ID来指定打开前置还是后置相机。
(2)调用Camera.getParameters()得到一个Camera.Parameters对象。
(3)使用步骤2得到的Camera.Parameters对象,对拍照参数进行设置。
(4)调用Camera.setPreviewDispaly(SurfaceHolder holder),指定使用哪个SurfaceView来显示预览图片。
(5)调用Camera.startPreview()方法开始预览取景。
(6)调用Camera.takePicture()方法进行拍照。
(7)拍照结束后,调用Camera.stopPreview()结束取景预览,之后再调用release()方法释放资源。
2.Camera2
Camear2拍照引用了管道的概念,将安卓设备和摄像头之间联通起来,系统向摄像头发送Capture请求,而摄像头会返回CameraMetadata。这一切建立在一个叫作CameraCapture-Session的会话中,如图5-13所示。
图5-13 Camera2拍照示意图
下面是camera2包中的主要类,如图5-14所示。
(1)CameraManager:摄像头管理器,用于检测摄像头,打开系统摄像头,调用Camera-
图5-14 Camera2包中的主要类
Manager.getCameraCharacteristics(String),可以获取指定摄像头的相关特性。
(2)CameraCharacteristics:摄像头的特性。
(3)CameraDevice:摄像头,类似于android.hardware.Camera,也就是Camera1的Cam- era。
(4)CameraCaptureSession:控制摄像头的预览或者拍照,setRepeatingRequest()用于开启预览,capture()用于拍照,CameraCaptureSession提供了StateCallback、CaptureCallback两个接口来监听CameraCaptureSession的创建和拍照过程。
(5)CameraRequest和CameraRequest.Builder:预览或者拍照时,都需要一个CameraR-equest对象。CameraRequest表示一次捕获请求,用来对照片的各种参数进行设置,比如对焦模式、曝光模式等。CameraRequest.Builder用来生成CameraRequest对象。(www.xing528.com)
3.实现拍照
使用SurfaceView来进行展示预览,主要思路如下。
获得摄像头管理器CameraManagermCameraManager,应用mCameraManager.openCamera()打开摄像头。
指定要打开的摄像头,并创建openCamera()所需要的CameraDevice.StateCallback stateCall-back。
在CameraDevice.StateCallback stateCallback中调用takePreview(),在这个方法中,使用CaptureRequest.Builder创建预览需要的CameraRequest,并初始化CameraCapture-Session,最后调用了setRepeatingRequest(previewRequest,null,childHandler)进行预
览,单击屏幕,调用takePicture(),在这个方法中,最终调用capture(mCaptureRe-quest,null,childHandler)。
在newImageReader.OnImageAvailableListener()回调方法中,展示拍照得到的图片。具体操作步骤如下。
(1)在Android 2.3中创建应用项目:SurfaceView_Camera2。其中布局文件activity_main.xml,包含两个按钮和一个ListView控件。另一个布局文件是ListView控件的显示内容布局文件itemlayout.xml,如下所示。
(2)主界面的Activity文件MainActivity.java的代码如下。
图5-15 SurfaceViewCamera2项目的运行结果
(3)在AndroidManifest.xml文件中增加权限。
(4)SurfaceView_Camera2项目的运行结果如图5-15所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。