Symbian S60 Camera

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來做不同的配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章