显示 JPG 和 GIF 图片的简单方法 king fan 2002/11/27 经常在论坛上看到有人问如何显示JPGE和GIF图片,我这里刚好有一段显示JPEG和GIF图片的代码。拷回去吧?说不定下次有的着呢。 CShowJpegView是我的的一个视图类,用的时候一定要将这个将成你自己的类哦!不是视图类也行,只要你能够传个CDC给这个函数就行。 /* 函数功能:显示JPG和GIF图片 参数说明 pDC:设备环境对象 strPath:要显示的图片路径 x:要显示的X位置 y:要显示的Y位置 */ BOOL CShowJpegView::ShowJpgGif(CDC* pDC,CString strPath, int x, int y) { IStream *pStm; CFileStatus fstatus; CFile file; LONG cb; //打开文件并检测文件的有效性 if (file.Open(strPath,CFile::modeRead)&& file.GetStatus(strPath,fstatus)&& ((cb = fstatus.m_size) != -1)) { HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); LPVOID pvData = NULL; if (hGlobal != NULL) { pvData = GlobalLock(hGlobal); if (pvData != NULL) { file.ReadHuge(pvData, cb); GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); } } } else { return false; } //打开文件结束 //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画, //要显示动画GIF请使用ACTIVE控//件。 IPicture *pPic; //load image from file stream 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; //get image height and width 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); //use render function display image if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(Dword)fY,0, hmHeight,hmWidth,-hmHeight,NULL))) { pPic->Release(); return false; } pPic->Release(); } else { return false; } return true; } 下面这三行代码是调用时函数的方法: CString sPath; sPath=_T("C:\\Windows\\SYSTEM\\OOBE\\IMAGES\\BGMC.JPG"); ShowJpgGif(pDC,sPath,100,100); 如果你显示的是在一个控件在,请用如下方式获得CDC //将pStatic指向要显示的地方 CDC* pDC = GetDlgItem(IDC_CONTROL)->GetDC(); 以上是显示JPG和GIF图片的一个简单的方法,简单的同时也存在着不足。放大缩小功能和显示动画GIF文件没实现。
|