Symbian S60 Camera引擎
//在S60v2上验证,Nokia系列手机都没有问题
今天没什么事情,写篇S60的Camera的文章给大家参考一下,S60Camera主要是通过操作CCamera来获取Camera的信息并操作Camera来启动关 闭Camera,逻辑上还是有些麻烦的,所以我封装了一个CCamEngine简化了逻辑和调用,CCamEngine是封装了对camera的所有操 作,并提供了简单的易用的接口,方便应用的集成和操作,定义的Camera内部状态:ECamError, ECamOff, ECamInit, ECamReserve, ECamPowerOn, ECamActive, ECamStandby;
主要的接口如下: StopPreview() StartPreview() OpenCam() CloseCam() TakePicture(), CCamEngine继承MCameraObserver,里面代码不是很多,主要是对Camera逻辑上的控制,采用Observer模式,在 Camera变化时候通过Observer来驱动View完成预览、拍摄、缩放等工作;
Camera驱动示意:
// Active
// PowerOn
// Reserve
// Off
开启Camera是从off -> Reserve -> PowerOn -> Active,关闭时候正好相反,Error/Init/Standby是属于Engine的状态,代码:
---------------------------------------------------
void CCamEngine::ImageReady(CFbsBitmap* aBitmap, HBufC8* /*aData*/,TInt aError)
{
// 显示aBitmap图到屏幕上,通过Gc可以完成预览图的显示,aBitmap是属于系统的,不需要手工删除;
// 在设备播放一段时间后可能图像会出现跳动,一般是由于来不及处理,可以选择抛弃几个frame,使得ViewFinder看起来比较平滑;
//
}
一般S60的Camera还带了一些特殊的功能,如:
iCamera->SetDigitalZoomFactorL(aValue); //数字缩放
iCamera->SetFlashL(aValue); //闪光灯
iCamera->SetBrightnessL(aValue); //明亮度
iCamera->SetContrastL(aValue); //明亮度
iCamera->SetExposureL(aValue); //曝光
iCamera->SetWhiteBalanceL(aValue); //白平衡
iCamera->PrepareImageCaptureL(CCamera::EFormatFbsBitmapColor16M, aValue); //在capture前必须设置静态图大小和格式
这 些特性并非所有的camera驱动都支持的,在使用时候必须检查硬件信息,CameraInfo里面可以看到是否支持该特性,如做 DigitalZoom,就必须对不同的设备做不同的缩放等级,不同的机型一般都不相同的,如果需要兼容不同的设备还需要根据设备的id来做不同的配置。