设为首页 加入收藏

TOP

11.1.4 在程序中显示JPEG与GIF文件
2013-10-07 00:11:23 来源: 作者: 【 】 浏览:74
Tags:11.1.4 程序 显示 JPEG GIF 文件

11.1.4  在程序中显示JPEG与GIF文件

可以通过IPicture接口来显示JPEG和GIF图像。首先利用CFile对象从文件中读取图像数据到缓冲区中,然后调用CreateStreamOnHGlobal方法在缓冲区中创建一个流对象,接着调用OleLoadPicture方法从流中加载图像信息到IPicture中,最后调用IPicture的Render方法绘制图像。

例如:
显示JPEG与GIF文件的程序设计步骤如下。
ch1103实例位置:mr\11\sl\03
(1)创建一个基于单文档的应用程序。
(2)在单文档中加入ID为IDD_GIF的对话框资源,并为对话框创建新类CViewGif,实现文件是ViewGif.cpp,头文件是ViewGif.h。
(3)设计菜单IDR_MAINFRAME,在菜单“查看”下新建子菜单,ID设为ID_VIEWGIF,Caption为gif。
(4)通过类向导为ID是ID_VIEWGIF的菜单添加消息处理函数,并在该函数中调用对话框。
(5)在对话框中添加OnPaint函数,用于显示GIF文件。代码如下:

void CViewGif::OnPaint() 
{
CPaintDC dc(this);

char buf[512];
::GetCurrentDirectory(512,buf); //得到当前程序所在文件夹
strcat(buf,"\\test.gif");
CFileStatus fstatus;
CFile file;
IStream *pStm;
LONG cb;    
if(file.Open(buf,CFile::modeRead)&&file.GetStatus(buf,fstatus)&&
((cb = fstatus.m_size) != -1)) //打开要读取的GIF文件
{
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);
}
}
}
IPicture *pPic;
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,false,
IID_IPicture,(LPVOID*)&pPic))) //装载图片资源
{
long a,b;
pPic->get_Width(&a);
pPic->get_Height(&b);
CSize sz(a,b);
CDC *pdc = GetDC();
pdc->HIMETRICtoDP(&sz);
CRect rect;
this->GetClientRect(&rect);
pPic->Render(*pdc,rect.left+1,rect.top+1,sz.cx,sz.cy,0,b,a,-b,&rect);
}
}

(6)程序运行结果如图11.3所示。

图11.3  显示JPEG和GIF图像
说明:
显示JPEG同显示GIF的算法一样,只要将打开的文件换成JPEG文件即可。

责任编辑:阚书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.1.2 将位图文件绘制成对话框背.. 下一篇11.2.1 播放应用程序中的WAVE资源

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: