精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>图形图像及多媒体专题>>在VC中显示JPEG和GIF图像

主题:在VC中显示JPEG和GIF图像
发信人: black()
整理人: wenbobo(2002-12-27 15:53:04), 站内信件
以下文章来自水木清华

发信人: telnet (小飞象), 信区: VisualC       
标  题: 不要怀疑了,JDK是对的
发信站: BBS 水木清华站 (Sun Oct  3 14:07:23 1999)

中午吃饭时试了一下,成功了。
我看了MSDN也以为只对BMP有用,结果是对JPG GIF都可以。
向不轻信MS的JDK致敬!
//admire JDK
以下是实验代码,大家可以在95下试试,我在98+IE5上成功。
是一个CView的例子,别忘了AfxOleInit
另,时间短,写得很乱,,大家自行改进吧!

void CPICView::OnDraw(CDC* pDC)
{
 CPICDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);

 IPicture *pPic;
 IStream *pStm;

 CFileStatus fstatus;
 CFile file;
 LONG cb;

 if (file.Open("c:/test.jpg",CFile::modeRead)&&file.GetStatus("c:/test.jpg", 
fstatus)&&
  ((cb = fstatus.m_size) != -1))
 {
  HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
  LPVOID pvData = NULL;
  if (hGlobal != NULL)
  {
   if ((pvData = GlobalLock(hGlobal)) != NULL)
   {
    file.ReadHuge(pvData, cb);
    GlobalUnlock(hGlobal);
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);

    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*
)&pPic)))
    {
     OLE_XSIZE_HIMETRIC hmWidth;
     OLE_YSIZE_HIMETRIC hmHeight;

     pPic->get_Width(&hmWidth);
     pPic->get_Height(&hmHeight);
     
     double fX,fY;
     fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->Ge
tDeviceCaps(HORZSIZE)*100.0);
     fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->G
etDeviceCaps(VERTSIZE)*100.0);
     if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-h
mHeight,NULL)))
      AfxMessageBox("Failed To Render The picture!");
     pPic->Release();
    }
    else
     AfxMessageBox("Error Loading Picture From Stream!");
   }
  }
 }
 else
  AfxMessageBox("Can't Open Image File!");
}

--
-------------------------------------------------------------------------------
孤客一身千里外,未知归日是何年
Email : [email protected]

※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.96.138.54]

[关闭][返回]