wince下显示流式jpg图象

来源:互联网 发布:室内设计师证书知乎 编辑:程序博客网 时间:2024/05/01 16:04

HBITMAP CImage::loadImgFile( CString &sFName)
{    

   int  n_start=0,n_end=0;

 GetPos(n_start,n_end,strFileName);
 CString filename(L"test.jpg");//文件名
 FILE* file = fopen(filename,"rb");
 //获取文件长度
 DWORD filelen =n_end-n_start;//m_file.GetLength()
 CString str=L"^-^";
 str.Format(L"%d",m_filelen);
 //分配空间
 HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,filelen);

 LPVOID pvdata = NULL;
 //锁定堆空间,获取指向堆空间的指针
 pvdata = GlobalLock(m_hglobal);
 //将文件数据读区到堆中
 m_file.Read(pvdata,m_filelen);
 fread(pvdata, filelen, 1, file);
 IStream*  m_stream;
 GlobalUnlock(m_hglobal);
 //在堆中创建流对象
 CreateStreamOnHGlobal(hglobal,TRUE,&m_stream);
CoInitializeEx(NULL,COINIT_MULTITHREADED);
IImagingFactory *pImgFactory =NULL; 
IImage *pImage =NULL; 
HBITMAP hResult =0;
    if   (SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory, 
                                     NULL, 
                                     CLSCTX_INPROC_SERVER, 
                                     IID_IImagingFactory, 
                                     (void   **)&pImgFactory))) 
 { 
  ImageInfo imageInfo; 
      //直接将流数据传进去
     if(SUCCEEDED(pImgFactory->CreateImageFromStream(m_stream,&pImage)) 
    // if(SUCCEEDED(pImgFactory->CreateImageFromFile(strFileName,&pImage))
     && SUCCEEDED(pImage->GetImageInfo(&imageInfo))) 
        { 
   CWindowDC dc(0); 
   CDC dcBitmap; 
   dcBitmap.CreateCompatibleDC(&dc); 
   hResult =CreateCompatibleBitmap(dc.GetSafeHdc(),imageInfo.Width,imageInfo.Height); 
   if(hResult){ 
    HGDIOBJ   hOldBitmap   =   dcBitmap.SelectObject(hResult); 
                pImage->Draw(dcBitmap.GetSafeHdc(),CRect(0,0,imageInfo.Width,imageInfo.Height),NULL); 
    dcBitmap.SelectObject(hOldBitmap); 
   
   } 
   pImage->Release(); 
        }

        pImgFactory->Release(); 
     
 }
    CoUninitialize();
 
 return hResult;
}

原创粉丝点击