📄 imageloaderengine.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 + -