龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

使VC显示jpg gif图像(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
由于该函数有时会导致失败,所以应当用SUCCEEDED宏来做一些适当的保护工作,只有在数据装载成功的前提下才能继续下面的图像显示工作: if(SUCCEEDED(OleLo

  由于该函数有时会导致失败,所以应当用SUCCEEDED宏来做一些适当的保护工作,只有在数据装载成功的前提下才能继续下面的图像显示工作:   

  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->GetDeviceCaps(HORZSIZE)*100.0);

   fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);

   if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) {

    AfxMessageBox("渲染图像失败!");

    pPic->Release();

   }

   else

   AfxMessageBox("从流中装载图像失败!");

  }

 其中,显示工作主要是由IPicture接口对象的Render函数来完成的,该函数主要用来将图片的指定部分画到指定的设备环境的指定位置。原型如下:   

  HRESULT Render( HDC hdc, //渲染图像用的设备环境句柄

  long x, //在hdc上的水平坐标

  long y, //在hdc上的垂直坐标

  long cx, //图像宽度

  long cy, //图像高度

  OLE_XPOS_HIMETRIC xSrc, //在源图像上的水平偏移

  OLE_YPOS_HIMETRIC ySrc, //在源图像上的垂直偏移

  OLE_XSIZE_HIMETRIC cxSrc,//在源图像上水平拷贝的数量

  OLE_YSIZE_HIMETRIC cySrc,//在源图像上垂直拷贝的数量

  LPCRECT prcWBounds //指向目标图元设备环境句柄的指针);

  小结:

  到此为止,通过上述代码已经能够在程序的客户区内显示JPEG、GIF等标准的图像了,但对于有多帧图片(即有动画)的GIF格式的图像,目前还只能显示第一帧,如要完整的显示GIF 动画的全过程,还需要外部Active X控件的支持。

精彩图集

赞助商链接