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

📄 image_reader.cpp

📁 symbian 平台下
💻 CPP
字号:
/*
 ============================================================================
 Name		: Image_Reader.cpp
 Author	  : 
 Version	 : 1.0
 Copyright   : Your copyright notice
 Description : CImage_Reader implementation
 ============================================================================
 */
#include <cntdef.h> 
#include <cntitem.h>
#include <cntfldst.h>
#include <cntdb.h>
#include <COEMAIN.H>
#include <APMREC.H>
#include <APGCLI.H>

#include "Image_Reader.h"

CImage_Reader* CImage_Reader::NewLC(const TDesC& aFileName,MImageReadyCallBack& aNotify )
	{
	CImage_Reader* self = new ( ELeave ) CImage_Reader(aNotify);
	CleanupStack::PushL(self);
	self->ConstructL(aFileName);
	return self;
	}

CImage_Reader* CImage_Reader::NewL(const TDesC& aFileName,MImageReadyCallBack& aNotify)
	{
	CImage_Reader* self = CImage_Reader::NewLC(aFileName, aNotify);
	CleanupStack::Pop(); // self;
	return self;
	}

CImage_Reader::CImage_Reader(MImageReadyCallBack& aNotify)
:CActive(0),iNotify(aNotify)
    {
    }
 
CImage_Reader::~CImage_Reader()
{
	Cancel();
	delete iFrame;
	delete iImageDecoder;
	delete iBitmapScaler;
}
 
 
void CImage_Reader::ConstructL(const TDesC& aFileName)
{
	CActiveScheduler::Add(this);
	iBitmapScaler = CBitmapScaler::NewL();
	
	iImageName.Copy(aFileName);
	
	TBuf8<255> ImageType;
	GetFileType(aFileName, ImageType);
	
	if(ImageType.Length() && iImageName.Length())
	{		
		iImageDecoder = CImageDecoder::FileNewL(CCoeEnv::Static()->FsSession(),aFileName,ImageType);
 
		delete iFrame;
		iFrame = NULL;
		iFrame = new(ELeave)CFbsBitmap();
		iFrame->Create(iImageDecoder->FrameInfo(0).iOverallSizeInPixels,iImageDecoder->FrameInfo(0).iFrameDisplayMode);
 
		iImageDecoder->Convert(&iStatus,*iFrame,0);
		SetActive();
	}
	else
	{
		TRequestStatus* status=&iStatus;
		User::RequestComplete(status, KErrNotSupported);
		SetActive();
	}
}
 
void CImage_Reader::GetFileType(const TDesC& aFileName, TDes8& aFileType)
{
	TEntry FileEntry;
 
	if(CCoeEnv::Static()->FsSession().Entry(aFileName,FileEntry) == KErrNone)
	{
		TBuf8<255> FileBuffer;
		
		if(!FileEntry.IsDir())
		{
			TInt FileSize = FileEntry.iSize;
 
			if(FileSize > 255)
			{
				FileSize = 255;
			}
			
			if(CCoeEnv::Static()->FsSession().ReadFileSection(aFileName,0,FileBuffer,FileSize) == KErrNone)
			{
				RApaLsSession RSession;
				if(RSession.Connect() == KErrNone)
				{	
					TDataRecognitionResult FileDataType;
 
					RSession.RecognizeData(aFileName,FileBuffer,*&FileDataType);
					
//					if(FileDataType.iConfidence > aResult.iConfidence)
//					{
						aFileType.Copy(FileDataType.iDataType.Des8());
//					}
					
					RSession.Close();
				}
			}
		}
	}
}
 
void CImage_Reader::DoCancel()
{
if(iImageDecoder)
	{
	iImageDecoder->Cancel();
	}
if (iBitmapScaler)
	{
	iBitmapScaler->Cancel();
	}
}
 
CFbsBitmap* CImage_Reader::Bitmap()
{
	return iFrame;
}
 
	
void CImage_Reader::RunL()
{
	iNotify.ImageReadyL(iStatus.Int());
}

⌨️ 快捷键说明

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