如何读取图片

 

我们知道,Symbian系统中只能直接显示bitmap格式的位图数据,下面的代码演示了如何使用CimageDecoder打开不同格式的图像文件,并把它转换为Symbian的bitmap格式,从而能能够在屏幕上显示出来。

/*****************************************************************************************************************

Image_Reader.cpp

******************************************************************************************************************/

#include <cntfield.h>
#include <cntdef.h> 
#include <cntitem.h>
#include <cntfldst.h>
#include <cntdb.h>
#include <COEMAIN.H>
#include <APMREC.H>
#include <APGCLI.H>
 
 
CImage_Reader::CImage_Reader(MImageReadyCallBack& aNotify)
:CActive(0),iNotify(aNotify)
    {
    }
 
CImage_Reader::~CImage_Reader()
{
 Cancel();
 delete iFrame;
}
 
 
void CImage_Reader::ConstructL(const TDesC& aFileName)
{
 CActiveScheduler::Add(this);
 
 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()
{
 iImageDecoder->Cancel();
}
 
CFbsBitmap* CImage_Reader::Bitmap()
{
 return iFrame;
}
 
 
void CImage_Reader::RunL()
{
 iNotify.ImageReadyL(iStatus.Int());
}

/*****************************************************************************************************************

 Image_Reader.h

******************************************************************************************************************/

#include <e32base.h>
#include <coecntrl.h>
#include <w32std.h>
#include <e32std.h>
#include <cntdef.h>
#include <cntdb.h> 
#include <ImageConversion.h>
 
class CFbsBitmap;
 
 class MImageReadyCallBack
 {
 public:
  virtual void ImageReadyL(const TInt& aError) = 0;
  };
 
 class CImage_Reader : public CActive
 {
 public:
     CImage_Reader(MImageReadyCallBack& aNotify);
     void ConstructL(const TDesC& aFileName);
     ~CImage_Reader();
 public:
     CFbsBitmap* Bitmap();
 protected:
  void DoCancel();
  void RunL();
 private:
  void GetFileType(const TDesC& aFileName, TDes8& aFileType);
 private:
  MImageReadyCallBack& iNotify;
  CImageDecoder*   iImageDecoder;
  CFbsBitmap*    iFrame;
  TFileName    iImageName;
 };

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值