编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 显示JPEG图像
  · 显示JPEG图像

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  110 篇
技术分:  1160 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 16:47:28
          楼主
显示JPEG图像
位图文件最大的缺点就是压缩比较小,占用空间大。因此网页均不采用位图的格式显示,而是以JPEG或GIF格式显示。在Visual C++中显示JPEG图像并不像显示Bmp图像那么简单,它需要通过流操作来实现。具体思路是将JPEG文件加载到堆中,然后在堆中创建一个数据流,接着调用OleLoadPicture函数加载流中的数据到IPicture接口中,最后调用IPicture接口的Render方法输出图像信息。下面通过一个示例介绍在窗口中显示JPEG图像。
例如,在窗口中显示JPEG图像
(1)创建一个单文档/视图结构的应用程序,工程名称为“ShowJPEG”。
(2)向视图类中添加成员变量。
IStream *m_pStream;            //定义流对象
IPicture *m_pPicture;            //定义接口对象
OLE_XSIZE_HIMETRIC m_JPGWidth;         //图像宽度
OLE_YSIZE_HIMETRIC m_JPGHeight;         //图像高度
HGLOBAL hMem;             //堆句柄
(3)在视图类的构造函数中从磁盘中加载JPEG图像到流中。
CShowJPEGView::CShowJPEGView()
{
 CFile file;              //定义文件对象
 file.Open("angell.jpg",CFile::modeReadWrite);       //打开文件
 DWORD len = file.GetLength();          //获取文件长度
 hMem = GlobalAlloc(GMEM_MOVEABLE,len);       //在堆中分配内存
 LPVOID pData = NULL;            //定义一个指针对象
 pData = GlobalLock(hMem);          //锁定内存区域
 file.ReadHuge(pData,len);           //读取图像数据到堆中
 file.Close();             //关闭文件
 GlobalUnlock(hMem);           //解锁对堆的锁定
 CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);     //在堆中创建流
 OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPicture); //加载图像
 m_pPicture->get_Height(&m_JPGHeight);        //获取图像高度
 m_pPicture->get_Width(&m_JPGWidth);        //获取图像宽度
}
(4)在视图类的OnDraw方法中绘制JPEG图像。
void CShowJPEGView::OnDraw(CDC* pDC)
{
 CShowJPEGDoc* pDoc = GetDocument();       //获取文档对象
 ASSERT_VALID(pDoc);           //验证文档对象
 //绘制JPEG图像
 m_pPicture->Render(pDC->m_hDC,0,0,(int)(m_JPGWidth/26.45),(int)(m_JPGHeight/26.45)
                ,0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL); 
}
(5)运行应用程序,效果如图1所示。
 
图1  显示JPEG图像
 技巧:本实例是通过IPicture接口来绘制JPEG图像的,同样只要修改一下文件扩展名就可以直接绘制GIF的图像。
本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页