請問BCB有辦法讓動態圖檔(如gif..)在程式上撥放嗎 |
尚未結案
|
chocosan
一般會員 發表:2 回覆:1 積分:0 註冊:2005-02-23 發送簡訊給我 |
|
nlj859
資深會員 發表:139 回覆:375 積分:322 註冊:2004-03-20 發送簡訊給我 |
Hello chocosan, 請參考底下做法:
Source Article: http://www.newebug.com/article/cpp/2226.shtml
JPG,动态GIF,BMP一些常用解决办法 (文档类别:C ) 2004-11-20 常用方式0,使用GIF89A类: 优势: 一招鲜吃遍天,上至动态GIF,下至静态JPG,BMP两句搞定,简单方便 缺点: 有时会出现边缘效果, 有的图像会挺明显 使用方法: aaaa#include "gif89a.h" aaaaCGif89a* gif; aa在调用函数内添加: aaaa gif=new CGif89a(this->m_hWnd); aaaa gif->Load("test.gif"); aaaa gif->SetPosition(100,100); aaaa gif->Play(); aaaa //gif->Pause(TRUE); //Pause(TRUE)为暂停GIF的播放 aaaa //gif->Pause(FALSE);//Pause(FALSE)为继续GIF的播放 常用方式1,使用iPicture: 优势: MS早期的图片类, 可以显示所有的静态图片, 显示动态GIF尚需一个GIF的图象储存结构gifImage,如果有兴趣可以看看薛碧的如何在VC中显示动态的GIF 缺点: 用户自主定义不太方便, 薛碧文章是介绍在RC静态编辑显示动态GIF的办法,本来打算改写一下作个GIF类, 发现了GIF89A, 于是没作了多余工 调用方法:a aaaCString sPath; aaasPath=_T("1.JPG"); aa //CDC* pDC = GetDlgItem(IDC_CONTROL)->GetDC();//获得控件DC aa CRect zcRect; aa GetClientRect(&zcRect); aa ShowJpgGif(pDC,sPath,zcRect.left,zcRect.top,zcRect.Width(),zcRect.Height()); 函数实现 aaBOOL ShowJpgGif(CDC* pDC,CString strPath, int x, int y ,int Width, int Height) aa{ aaaa IStream *pStm;a aaaa CFileStatus fstatus;a aaaa CFile file;a aaaa LONG cb;a aaaa //打开文件并检测文件的有效性 aaaa if (file.Open(strPath,Cfile&::modeRead)&& aaaa file.GetStatus(strPath,fstatus)&& aaaaaaaaaaaaa((cb = fstatus.m_size) != -1))a aaaa {a aaaaaaaHGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);a aaaaaaaLPVOID pvData = NULL;a aaaaaaaif (hGlobal != NULL)a aaaaaaa{a aaaaaaaaa pvData = GlobalLock(hGlobal); aaaaaaaaa if (pvData != NULL)a aaaaaaaaaaa {a aaaaaaaaaaaafile.Read(pvData, cb);a aaaaaaaaaaaaGlobalUnlock(hGlobal);a aaaaaaaaaaaaCreateStreamOnHGlobal(hGlobal, TRUE, &pStm);a aaaaaaaaaaa } aaaaaaa} aa } aa else aa { aaaaareturn false; aa } //打开文件结束 aa //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画, aa //要显示动画GIF请使用ACTIVE控//件。 aa IPicture *pPic; aa //load image from file stream aa if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) aa { aaaaaOLE_XSIZE_HIMETRIC hmWidth;a aaaaaOLE_YSIZE_HIMETRIC hmHeight;a aaaaapPic->get_Width(&hmWidth);a aaaaapPic->get_Height(&hmHeight);a aaaaadouble fX,fY;a aaaaa//get image height and width aaaaafX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/ aaaaa (double)pDC->GetDeviceCaps(HORZSIZE)*100.0;a aaaaafY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/ aaaaa (double)pDC->GetDeviceCaps(VERTSIZE)*100.0;a aaaaa//use render function display image aaaaaif(FAILED(pPic->Render(*pDC, x, y, Width, Height,0, aaaaaaaaaaaaa hmHeight,hmWidth,-hmHeight,NULL)))a aaaa { aaaaaaa pPic->Release(); aaaaaaa return false; aaaa} aa pPic->Release();a a}a elsea { areturn false;a } return true; } 常用方式2, 使用MS CImage 优点: MS的最新图像类,MFC/ATL通用, 应该是可靠的,使用也很简单方便,较为灵活,目的应该为替代iPicture类 缺点: 还是不能完美的解决动态GIF问题, #include |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |