VC没有直接显示JPG图片的方法,在网上找了个比较简单的列子自己改了下,还挺好用,下面一个函数就行了

[cpp] view plaincopyprint?
  1. ShowJpgGif(CDC* pDC,CString strPath, int x, int y)
  2. {
  3. IStream *pStm;
  4. CFileStatus fstatus;
  5. CFile file;
  6. LONG cb;
  7. if (file.Open(strPath,CFile::modeRead)&&file.GetStatus(strPath,fstatus)&&((cb = fstatus.m_size) != -1))
  8. {
  9. HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
  10. LPVOID pvData = NULL;
  11. if (hGlobal != NULL)
  12. {
  13. pvData = GlobalLock(hGlobal);
  14. if (pvData != NULL)
  15. {
  16. file.Read(pvData, cb);
  17. GlobalUnlock(hGlobal);
  18. CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
  19. }
  20. }
  21. }
  22. else
  23. return false;
  24. //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,
  25. //要显示动画GIF请使用ACTIVE控//件。
  26. IPicture *pPic;
  27. //load image from file stream
  28. if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
  29. {
  30. OLE_XSIZE_HIMETRIC hmWidth;
  31. OLE_YSIZE_HIMETRIC hmHeight;
  32. pPic->get_Width(&hmWidth);
  33. pPic->get_Height(&hmHeight);
  34. double fX,fY;
  35. //get image height and width
  36. fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
  37. fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
  38. //use render function display image
  39. if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
  40. {
  41. pPic->Release();
  42. return false;
  43. }
  44. pPic->Release();
  45. }
  46. else
  47. return false;
  48. return true;
  49. }
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.Read(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;
}

使用方法:

在对话框上放一个cstatic控件IDC_STC_DUMMY,调整控件大小使得图片能够完全显示

[cpp] view plaincopyprint?
  1. CDC* pDC = GetDlgItem(IDC_STC_DUMMY)->GetDC();
  2. ShowJpgGif(pDC,"aa.jpg",0,0);

vc显示jpg,gif图像简单方法相关推荐

  1. Win10如何显示文件后缀名?显示后缀名的简单方法

    现在大多数用户使用的电脑都是Win10系统,有时我们重装电脑系统,会发现电脑出现一些问题,比如文件后缀名不显示出来.如何显示文件后缀名?方法很简单,跟着下面的详细操作步骤走,轻轻松松Get回消失的文件 ...

  2. 上传图片并显示缩略图的最简单方法(c#)

    private void fileUpload_Click(object sender, System.EventArgs e)         {             // 模拟数据库里取出by ...

  3. VC++ 用ADO连接数据库的简单方法

    在头文件中要包含 #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace renam ...

  4. VC开发多语言界面支持的简单方法

    VC开发多语言界面支持的简单方法 作者:成晓旭 (需要完整源代码请留言) 最近在做一个小程序,要求实现对多语言界面显示支持功能,并且,界面显示内容用户能够自己设置. 初步设计用INI文件来配置显示内容 ...

  5. python储存与读取图片_Python下opencv使用笔记(一)(图像简单读取、显示与储存)...

    写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...

  6. python图显示在新的窗口_python在新的图片窗口显示图片(图像)的方法

    python在新的图片窗口显示图片(图像)的方法 使用python画图,发现生成的图片在console里.不仅感觉很别扭,很多功能也没法实现(比如希望在一幅图里画两条曲线). 想像matlab一样单独 ...

  7. php网页加查询框,Twentytwelve头部添加搜索框及网站名称与描述同行显示的简单方法 | 科研动力...

    Twenty Twelve 主题的头部默认没有搜索框,不像它的前辈和后生.这点我就不明白了,Twentyeleven和最新的Twentythirteen都有搜索框,为何Twentytwelve就没有呢 ...

  8. 简单的java信息显示_JSP实现简单的用户登录并显示出用户信息的方法

    本文实例讲述了jsp实现简单的用户登录并显示出用户信息的方法.分享给大家供大家参考.具体实现方法如下: login.jsp string path = request.getcontextpath() ...

  9. Baumer工业相机堡盟相机如何通过BGAPI SDK联合OpenCVSharp进行图像简单拼接并显示固定数量保存和持续保存(C#)

    Baumer工业相机堡盟相机如何通过BGAPI SDK联合OpenCVSharp进行图像简单拼接并显示固定数量保存和持续保存(C#) Baumer工业相机 Baumer工业相机SDK联合OpenCVS ...

最新文章

  1. aba问题mysql_解决CAS机制中ABA问题的AtomicStampedReference详解
  2. 【C 语言】文件操作 ( 文件加密解密 | 加密解密原理 | 对称加密原理 | 非密钥整数倍长度的数据加密处理 )
  3. 2018年JavaWeb和移动程序员学习的12个框架
  4. android日志收集存入mysql_rsyslog+analyzer+mysql实现日志收集展示
  5. BREW应用的分发流程
  6. 使用css3实现瀑布流布局效果
  7. 如何写一篇MBA论文-涉及matlab建模
  8. margin 负边距应用
  9. 程序员最爱用 Emacs 写 Python、Bash,调研了 7300 位开发者有这些发现
  10. DBL_EPSILON和FLT_EPSILON的用法
  11. python更改数据框指定位置的数据_python – 移动数据框列并更改列顺序
  12. 2021-06-06 弹窗练习
  13. IEC63174电动牙刷性能检测仪器分享
  14. 2020计算机保研心得(上岸中科大)
  15. Linux接蓝牙音响无声音,win10蓝牙音箱没有声音怎么办_win10蓝牙音响连接成功没声音处理方法...
  16. oppo手机出现android什么坏了,OPPO手机提示“停止运行”怎么办 oppo停止运行的解决方法...
  17. Linux上构筑iPhone OS3.1.2开发环境之解压firmware
  18. 电脑或U盘文件夹变为后缀为.exe文件,解决办法。
  19. 趋势科技公司的创始人:张明正的创业路
  20. 自定义控件实现(淘宝头条/京东快报)垂直循环滚动栏目

热门文章

  1. springboot jar包部署_Spring Boot项目基于Jar部署和打包详解教程
  2. 毕设日志5.12凌晨
  3. Netty 源码解析系列-服务端启动流程解析
  4. java中的byte
  5. [翻译]用 Puppet 搭建易管理的服务器基础架构(3)
  6. 【转】Android用NDK和整套源码下编译JNI的不同
  7. 员工的不幸?还是公司的悲哀?
  8. hotplug,automount与mdev的调试
  9. source insight 配置
  10. #if _MSC_VER 1000 #pragma once #endif