文档章节

VC 显示jpg和gif图片

剑禅觅心
 剑禅觅心
发布于 2016/08/01 21:30
字数 584
阅读 20
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

函数功能:显示JPG和GIF图片

参数说明
pDC:设备环境对象
strPath:要显示的图片路径
x:要显示的X位置
y:要显示的Y位置

*/

BOOL 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文件没实 现。

———————————————————————————————————————————————

以下代码也是实现显示jpg图片的方法:

void CxxxView::OnDraw(CDC* pDC)
{
::CoInitialize(NULL); // COM 初始化
HRESULT hr;
CFile file;

file.Open( "c:\\aa.jpg ", CFile::modeRead ¦ CFile::shareDenyNone ); // 读入文件内容
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );

IStream * pStream = NULL;
IPicture * pPicture = NULL;

// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );

hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr==S_OK);

long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
pPicture- >get_Width( &nWidth ); // 宽
pPicture- >get_Height( &nHeight ); // 高

////////原大显示//////
CSize sz( nWidth, nHeight );
pDC- >HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
pPicture- >Render(pDC- >m_hDC,0,0,sz.cx,sz.cy,
0,nHeight,nWidth,-nHeight,NULL);

////////按窗口尺寸显示////////
// CRect rect; GetClientRect(&rect);
// pPicture- >Render(pDC- >m_hDC,0,0,rect.Width(),rect.Height(),
// 0,nHeight,nWidth,-nHeight,NULL);

if ( pPicture ) pPicture- >Release();// 释放 IPicture 指针
if ( pStream ) pStream- >Release(); // 释放 IStream 指针,同时释放了 hMem

::CoUninitialize();
}

本文转载自:http://blog.csdn.net/amohan/article/details/8022160

剑禅觅心
粉丝 7
博文 224
码字总数 0
作品 0
深圳
高级程序员
私信 提问
GraphicsMagick的命令概览

GraphicsMagick的命令概览 ---------------------------------------------------------------------------- [ convert | identify | mogrify | composite | montage | compare | display | ......

mycms2013
2015/12/04
455
0
如何在线制作gif图片?

最近想做个gif在线制作的网站,所以研究下了imagemagick和graphicsmagick制作gif图片 站已经做出来了:有兴趣的朋友可以先看看 http://www.sosogif.com/makeonline.jsp 源码下载地址1:http:...

赤尔宝丁
2016/05/04
101
0
图片缩略图 水印处理--Nginx Image Module

本nginx模块主要功能是对请求的图片进行缩略/水印处理,支持文字水印和图片水印。 支持自定义字体,文字大小,水印透明度,水印位置。 判断原图是否是否大于指定尺寸才处理。 ....等等 编译方...

oopul
2013/05/04
13.8K
5
GIF/PNG/JPG和WEBP/base64/apng图片优点和缺点整理

 GIF/PNG/JPG/WEBP/APNG都是属于位图(位图 ,务必区别于矢量图);  GIF/PNG和JPG这三种格式的图片被广泛应用在现今的互联网中,gif曾在过去互联网初期慢速的情况下几乎是做到了大一统的地位...

凡尘里的一根葱
2015/10/01
781
0
用CImage类来显示PNG、JPG等图片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/akof1314/article/details/5167279 系统环境:Windows 7 软件环境:Visual Studio 2008 SP1 本次目的:实现V...

无幻
2010/01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何管stderr,而不是stdout?

我有一个要写入信息的程序stdout和stderr ,我需要grep通过什么是未来标准错误 ,而忽视标准输出 。 我当然可以分2步完成: command > /dev/null 2> temp.filegrep 'something' temp.file...

技术盛宴
20分钟前
4
0
centos7.5上通过docker安装并运行mysql5.7

1. docker pull mysql:5.7 2. docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7...

Ryub
23分钟前
5
0
什么是比赛条件?

在编写多线程应用程序时,遇到的最常见问题之一是竞争条件。 我对社区的问题是: 什么是比赛条件? 您如何检测到它们? 您如何处理它们? 最后,如何防止它们发生? #1楼 当设备或系统试图同...

javail
35分钟前
5
0
SpringMVC源码分析-DispatcherServlet-init方法分析

上一篇:SpringMVC源码分析-DispatcherServlet实例化干了些什么 先吐槽一下。。。写了两小时的博客突然被俺家小屁孩按了刷新,东西不见了,建议OSCHINA能够自动定时保存啊。让我先安静一下。...

特拉仔
42分钟前
5
0
python协程 生成器

协程,又称微线程,纤程。英文名Coroutine。 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度。在一个线程中会有很多函数,我们把这些函数称为子程序,在子...

沙门行道
53分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部