您所在的位置: 首页>>读书频道>>设计开发>>C++>>

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

http://book.51cto.com  2008-05-03 17:16  明日科技 宋坤 刘锐宁  人民邮电出版社  我要评论(0)
  • 摘要:《Visual C++程序设计自学手册》主要是以初学者学习程序开发为中心,由浅入深地全面介绍使用Visual C++ 6.0开发程序的各种技术。本章讲述了多媒体技术,就位图文件、WAVE文件、AVI文件和Flash动画进行简单的介绍,其中需要重点掌握的是位图文件的各种操作。本节讲了在程序中显示JPEG与GIF文件
  • 标签:程序  JPEG  GIF  Visual C++程序设计自学手册

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】

回书目   上一节   下一节
深入Vista应用程序开发
程序员如何成长?
Ruby on Rails 社区网站开发
ASP.NET从入门到精通
Java完全自学宝典
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有