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

📄 imageloaderengine.cpp

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

// INCLUDE FILES
#include <coemain.h>

#include "ImageLoaderEngine.h"


// ================= MEMBER FUNCTIONS =======================

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

// destructor
CImageLoaderEngine::~CImageLoaderEngine()
    {
    DoCancel();
    }

// constructor
CImageLoaderEngine::CImageLoaderEngine(MObserver& aObserver ) : 
    CActive(EPriorityStandard), iObserver(aObserver)
    {
    }

// EPOC default constructor can leave.
void CImageLoaderEngine::ConstructL()
    {
    CActiveScheduler::Add( this );
    }

void CImageLoaderEngine::RunL()
    {
    iObserver.OnCompleteL(iBitmap, iStatus.Int());
    iBitmap = NULL;
    DoCancel();
    }

void CImageLoaderEngine::DoCancel()
    {
    if(iImageDecoder!=NULL)
        {
        iImageDecoder->Cancel();
        }
    delete iImageDecoder;
    iImageDecoder = NULL;
    delete iBitmap;
    iBitmap = NULL;
    }

void CImageLoaderEngine::LoadL(const TFileName& aFileName)
    {
    DoCancel();
    iImageDecoder = CImageDecoder::FileNewL(CCoeEnv::Static()->FsSession(), aFileName);

    TInt count = iImageDecoder->FrameCount();
    if(count>0)
        {
        TFrameInfo frameInfo = iImageDecoder->FrameInfo(0);
        TRect rect = frameInfo.iFrameCoordsInPixels;

        iBitmap = new(ELeave) CFbsBitmap;
        iBitmap->Create(rect.Size(), frameInfo.iFrameDisplayMode);

        iImageDecoder->Convert(&iStatus, *iBitmap, 0);
        }
    else
        {
        TRequestStatus* s=&iStatus;
        User::RequestComplete(s, KErrCorrupt);
        }
    SetActive();
    }

// End of File  

⌨️ 快捷键说明

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