⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagecapturerengine.cpp

📁 《基于Symbian OS的手机开发与应用实践》这本书的配套源码。
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CImageCapturerEngine from ImageCapturerDocument.cpp
*  Part of  : ImageCapturer
*  Created  : 02.02.2006 by ToBeReplacedByAuthor
*  Implementation notes:
*     
*  Version  :
*  Copyright: ToBeReplacedByCopyright
* ============================================================================
*/

// INCLUDE FILES
#include "ImageCapturerEngine.h"

// static constants
const TInt CImageCapturerEngine::KDefaultImageWidth=176;
const TInt CImageCapturerEngine::KDefaultImageHeight=144;
const CCamera::TFormat CImageCapturerEngine::KDefaultImageFormat= 
    CCamera::EFormatFbsBitmapColor16M;
const TInt CImageCapturerEngine::KDefaultImageIndex=0;


// Two-phased constructor.
CImageCapturerEngine* CImageCapturerEngine::NewL(MObserver& aObserver)
    {
    CImageCapturerEngine* self = new (ELeave) CImageCapturerEngine(aObserver);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);
    return self;
    }

// destructor
CImageCapturerEngine::~CImageCapturerEngine()
    {
    iCamera->Release();
    delete iCamera;
    }

// constructor
CImageCapturerEngine::CImageCapturerEngine(MObserver& aObserver):
iObserver(aObserver)
    {
    }

// EPOC default constructor can leave.
void CImageCapturerEngine::ConstructL()
    {
    if (CCamera::CamerasAvailable()<=0)
        {
        User::Leave(KErrNotSupported);
        }

    iCamera = CCamera::NewL(*this,0);
    iCamera->Reserve();
    }

// Funtions from MCameraObserver
void CImageCapturerEngine::ReserveComplete(TInt aError)
    {
    if(aError == KErrNone)
        {
        iCamera->PowerOn();
        }
    else
        {
        iObserver.OnError(aError);
        }
    }

void CImageCapturerEngine::PowerOnComplete(TInt aError)
    {
    TInt err = aError;
    if(aError == KErrNone)
        {
        TCameraInfo info;
        iCamera->CameraInfo(info);
        if ((info.iOptionsSupported&TCameraInfo::EContrastSupported)!=0)
            {
            TRAP(err, iCamera->SetContrastL(CCamera::EContrastAuto));
            }
  
        TRAP(err,StartViewFinderL());
        if(err==KErrNone)
            {
            TRAP(err,PrepareImageCaptureL(KDefaultImageFormat));
            }
        }
    if(err!=KErrNone)
        {
        iObserver.OnError(aError);
        }
    }

void CImageCapturerEngine::ViewFinderFrameReady(CFbsBitmap& aFrame)
    {
    iObserver.OnFrame(aFrame);
    }

void CImageCapturerEngine::ImageReady(CFbsBitmap* aBitmap,HBufC8* /*aData*/,TInt aError)
    {
    if(aError == KErrNone)
        {
        iObserver.OnImage(aBitmap);
        }
    else
        {
        iObserver.OnError(aError);
        }
    }

void CImageCapturerEngine::FrameBufferReady(MFrameBuffer* /*aFrameBuffer*/,TInt /*aError*/)
    {
    }

// New functions
void CImageCapturerEngine::StartViewFinderL()
    {
    TSize imageSize(KDefaultImageWidth,KDefaultImageHeight);

    if(iCamera->ViewFinderActive())
        {
//      iObserver.OnError(KErrAlreadyActive)
        }
    else
        {
        iCamera->StartViewFinderBitmapsL(imageSize);
        }
    if(!iCamera->ViewFinderActive())
        {
//        iObserver.OnError(KErrNotActivated);
        }
    }

void CImageCapturerEngine::StopViewFinder()
    {
    iCamera->StopViewFinder();
    }

void CImageCapturerEngine::CaptureImage()
    {
    iCamera->CaptureImage();
    }

// new private methods
void CImageCapturerEngine::PrepareImageCaptureL(CCamera::TFormat aImageFormat)
    {
    iCamera->EnumerateCaptureSizes(iSize, KDefaultImageIndex, aImageFormat);
    iCamera->PrepareImageCaptureL(aImageFormat, KDefaultImageIndex);
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -