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

📄 imagehelper.cpp

📁 手机s60第三版动画编程相关
💻 CPP
字号:
/*
 ============================================================================
 Name		: ImageHelper.cpp
 Author	  : 
 Version	 : 1.0
 Copyright   : Your copyright notice
 Description : CImageHelper implementation
 ============================================================================
 */

#include "helper/ImageHelper.h"
#include "Common.h"

CImageHelper::CImageHelper(RFs& aFs) :
	CActive(EPriorityStandard), // Standard priority
			iFs(aFs)
	{
	}

CImageHelper* CImageHelper::NewLC(RFs& aFs)
	{
	CImageHelper* self = new ( ELeave ) CImageHelper(aFs);
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
	}

CImageHelper* CImageHelper::NewL(RFs& aFs)
	{
	CImageHelper* self = CImageHelper::NewLC(aFs);
	CleanupStack::Pop(); // self;
	return self;
	}

void CImageHelper::ConstructL()
	{
	CActiveScheduler::Add( this); // Add to scheduler
	iActiveSchedulerWait = new (ELeave)CActiveSchedulerWait;
	}

CImageHelper::~CImageHelper()
	{
	Cancel(); // Cancel any request, if outstanding

	if (iActiveSchedulerWait)
		{
		if (iActiveSchedulerWait->IsStarted())
			{
			iActiveSchedulerWait->AsyncStop();
			}

		delete iActiveSchedulerWait;
		iActiveSchedulerWait = NULL;
		}

	if (iImgDecoder)
		{
		iImgDecoder->Cancel();
		delete iImgDecoder;
		iImgDecoder = NULL;
		}
	}

void CImageHelper::LoadPngImageL(const TDesC& aFileName, CFbsBitmap& aBitmap, CFbsBitmap& aBitmapMask)
	{

	Cancel();

	delete iImgDecoder;
	iImgDecoder = NULL;

	// 获取图片
	iImgDecoder = CImageDecoder::FileNewL(iFs, aFileName, KMIMEType);
	TSize size = iImgDecoder->FrameInfo().iOverallSizeInPixels;
	TDisplayMode mode = iImgDecoder->FrameInfo().iFrameDisplayMode;

	// 创建位图
	User::LeaveIfError(aBitmap.Create(size, mode));
	User::LeaveIfError(aBitmapMask.Create(size, EGray256));

	// 调用转换异步函数
	//	iStatus = KRequestPending;
	iImgDecoder->Convert(&iStatus, aBitmap, aBitmapMask);

	SetActive();
	iActiveSchedulerWait->Start();
	}

void CImageHelper::DoCancel()
	{
	if (iImgDecoder)
		{
		iImgDecoder->Cancel();
		}
	}

void CImageHelper::RunL()
	{
	if (iStatus == KErrNone)
		{
		iActiveSchedulerWait->AsyncStop();
		}
	else
		if (iStatus == KErrUnderflow)
			{
			iImgDecoder->ContinueConvert(&iStatus);
			SetActive();
			iActiveSchedulerWait->Start();
			}
	}

TInt CImageHelper::RunError(TInt aError)
	{
	return aError;
	}

⌨️ 快捷键说明

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