IStream IImage

  1. HBITMAP CImageLoader::loadImageFile( CString &strFileName)
  2. {     
  3.    int  n_start=0,n_end=0;
  4.  GetPos(n_start,n_end,strFileName);
  5.  CString m_filename(L"1.data");//文件名
  6.  CFile m_file(m_filename,CFile::modeRead );
  7.  m_file.Seek(n_start,CFile::begin);
  8.  //获取文件长度
  9.  DWORD m_filelen =n_end-n_start;//m_file.GetLength()
  10.  CString str=L"^-^";
  11.  str.Format(L"%d",m_filelen);
  12.  AfxMessageBox(str);
  13.  //在堆上分配空间
  14.  HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);
  15.  LPVOID pvdata = NULL;
  16.  //锁定堆空间,获取指向堆空间的指针
  17.  pvdata = GlobalLock(m_hglobal);
  18.  //将文件数据读区到堆中
  19.  m_file.Read(pvdata,m_filelen);
  20.  IStream*  m_stream;
  21.  GlobalUnlock(m_hglobal);
  22.  //在堆中创建流对象
  23.  CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);
  24.     IImagingFactory *pImgFactory =NULL;  
  25.     IImage *pImage =NULL;  
  26.     CoInitializeEx(NULL,COINIT_MULTITHREADED); 
  27.    HBITMAP hResult =0;  
  28.     if   (SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,  
  29.                                      NULL,  
  30.                                      CLSCTX_INPROC_SERVER,  
  31.                                      IID_IImagingFactory,  
  32.                                      (void   **)&pImgFactory)))  
  33.  {  
  34.   ImageInfo imageInfo;  
  35.       //直接将流数据传进去
  36.        if(SUCCEEDED(pImgFactory->CreateImageFromStream(m_stream,&pImage))  
  37.     // if(SUCCEEDED(pImgFactory->CreateImageFromFile(strFileName,&pImage)) 
  38.      && SUCCEEDED(pImage->GetImageInfo(&imageInfo)))  
  39.         {  
  40.    CWindowDC dc(0);  
  41.    CDC dcBitmap;  
  42.    dcBitmap.CreateCompatibleDC(&dc);  
  43.    hResult =CreateCompatibleBitmap(dc.GetSafeHdc(),imageInfo.Width,imageInfo.Height);  
  44.    if(hResult){  
  45.     HGDIOBJ   hOldBitmap   =   dcBitmap.SelectObject(hResult);  
  46.                 pImage->Draw(dcBitmap.GetSafeHdc(),CRect(0,0,imageInfo.Width,imageInfo.Height),NULL);  
  47.     dcBitmap.SelectObject(hOldBitmap);  
  48.     
  49.    }  
  50.    pImage->Release();  
  51.         } 
  52.         pImgFactory->Release();  
  53.       
  54.  }
  55.     CoUninitialize(); 
  56.  return hResult;
  57. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值