From: http://blog.csdn.net/boythl/article/details/3137446

今天在VC6中显示JPG图片,采用了内存DC缓存的方法刷新,但死活刷不出来,查了一下午才明白(没办法,很少用GDI,我小菜一个:( ):使用IPicture::Render函数向DC上贴图时,若DC是一个内存DC,一定要先SelectObject一个CBitmap,内存DC没有Bitmap是画不出来的!

另外,IPicture是COM库,需要注意初始化COM,

CMYApp::InitInstance() 里使用 CoInitialize(NULL);

CMYApp::ExitInstance() 里使用 CoUninitialize();

下面贴出显示JPG图片到DC的函数,来自网上,自己整理了下,据说还可显示GIF图片的第一祯图片,我未用到。

  1. /*************************************************
  2. Function    : ShowJPG
  3. Description : 在DC上按图片原始尺寸显示JPG图片
  4. Calls       :
  5. Called By   :
  6. Parameter   : [CDC* pDC] --- DC
  7. : [CString strPath] --- 要显示的图片路径,建议全路径
  8. : [int x] --- DC上显示的X位置
  9. : [int y] --- DC上显示的Y位置
  10. : [bool OriginalSize] --- 是否按图片原始尺寸显示,false时将按DC大小缩放
  11. Return      : bool --- 是否成功
  12. Author      : Unknown
  13. Date        : 2008-10-24
  14. Modify      :
  15. *************************************************/
  16. bool ShowJPG(CDC* pDC,CString strPath, int x, int y, bool OriginalSize)
  17. {
  18. IStream *pStm;
  19. CFileStatus fstatus;
  20. CFile file;
  21. LONG cb;
  22. //打开文件并检测文件的有效性
  23. if (file.Open(strPath, CFile::modeRead) &&
  24. file.GetStatus(strPath,fstatus) &
  25. ((cb = fstatus.m_size) != -1))
  26. {
  27. HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
  28. LPVOID pvData = NULL;
  29. if (hGlobal != NULL)
  30. {
  31. pvData = GlobalLock(hGlobal);
  32. if (pvData != NULL)
  33. {
  34. file.ReadHuge(pvData, cb);
  35. GlobalUnlock(hGlobal);
  36. CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
  37. }
  38. }
  39. }
  40. else
  41. {
  42. return false;
  43. }
  44. //打开文件结束
  45. //显示JPEG图片
  46. IPicture *pPic;
  47. //load image from file stream
  48. if(SUCCEEDED(OleLoadPicture(pStm, fstatus.m_size, TRUE,IID_IPicture, (LPVOID*)&pPic)))
  49. {
  50. if (OriginalSize) //图片原始大小显示
  51. {
  52. long nWidth = 0, nHeight = 0; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
  53. pPic->get_Width( &nWidth ); // 宽
  54. pPic->get_Height( &nHeight ); // 高
  55. CSize sz( nWidth, nHeight );
  56. pDC->HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
  57. pPic->Render(pDC->m_hDC, 0, 0, sz.cx, sz.cy,
  58. 0, nHeight, nWidth, -nHeight, NULL);
  59. }
  60. else
  61. {
  62. OLE_XSIZE_HIMETRIC hmWidth;
  63. OLE_YSIZE_HIMETRIC hmHeight;
  64. pPic->get_Width(&hmWidth);
  65. pPic->get_Height(&hmHeight);
  66. //get image height and width
  67. double fX,fY;
  68. fX = (double)pDC->GetDeviceCaps(HORZRES)  * (double)hmWidth /
  69. ((double)pDC->GetDeviceCaps(HORZSIZE) * 100.0);
  70. fY = (double)pDC->GetDeviceCaps(VERTRES)  * (double)hmHeight /
  71. ((double)pDC->GetDeviceCaps(VERTSIZE) * 100.0);
  72. //use render function display image
  73. //按图片原始大小显示
  74. if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
  75. {
  76. pPic->Release();
  77. return false;
  78. }
  79. }
  80. if ( pStm ) pStm->Release(); // 释放 IStream 指针
  81. if ( pPic ) pPic->Release(); // 释放 IPicture 指针
  82. }
  83. else
  84. {
  85. return false;
  86. }
  87. return true;
  88. }

感谢vane小弟的帮助!及一个blog: http://topameng.spaces.live.com/blog/cns!f962d4854a8233d!248.entry ===================================

非注明转载的文章和blog在未特殊声明情况下一般为本人原创或整理,
原创文章版权归沙漠孤狐(lonefox)所有;转载文章版权归原作者所有;

http://blog.csdn.net/boythl

欢迎转载,但请注明出处,保留作者和版权信息。

===================================

VC6中使用内存DC加载并显示JPG图片的注意事项相关推荐

  1. [html] iOS下页面如何启动加载时显示画面图片?如何设置大小?它有什么好处?

    [html] iOS下页面如何启动加载时显示画面图片?如何设置大小?它有什么好处? <link rel="apple-touch-startup-image" href=&q ...

  2. vue解决图片加载失败显示默认图片的方法

    在项目中经常会遇到图片加载失败需要显示默认图片的场景,那么如何在图片src资源加载失败显示出默认的图片呢? 方法一:onerror <img src="原来要加载的资源" o ...

  3. img加载中显示loading,加载失败显示默认图片(React)

    实现效果 完整代码 import { useRef, useState } from 'react'; import './index.less'; import errorImg from '@/c ...

  4. webview中的img标签加载Android本地的图片

    在网上查了很多教程,感觉很麻烦,各种方法,最后最忌实践很简单,主要是两步: WebSettings webSettings=webView.getSettings();//允许webview对文件的操 ...

  5. 图片加载失败显示默认图片

    在页面加载的图片的时候,如果图片不存在或者路径不存在,页面加载图片就会如下图所示. 解决方法: 在img 标签中添加一下标签 onerror="onerror=null;src='img/a ...

  6. 前端页面图片加载失败显示默认图片

    方法有多种: 1.首先说我用的,看代码 //页面图片加载失败时 默认显示统一处理 document.addEventListener("error", function (e) { ...

  7. img图片加载前显示load图片

    只需要设置img的background即可 <img src="" alt="" class="detailImg"  > cs ...

  8. php 载入css就可以显示,如何在进度条加载后显示页面

    1.思路:加入很多图片,以延迟加载时间,实现加载完后显示图片.定义一个外层p,覆盖住图片,在内层p中引入加载时显示的图片,让内层p居中在页面上,利用setInterval定时器设置3秒后将外层p隐藏, ...

  9. Skia最新“编译”,绘制中文字符串,加载PNG、BMP图片等资料的整理。

    "编译"Skia 国内不适合自己编译.Github 有不止一个自动构建的SKIA二进制build,涵盖多个操作系统,可直接取而用之. 推荐大名鼎鼎的JetBrains维护的仓库,地 ...

最新文章

  1. yii2快速導出phpexcel
  2. ospf多区域配置为什么ping不通_「实战」动态路由多区域 OSPF 基本配置,一分钟了解下...
  3. TFLearn MNIST
  4. mysql集群搭建_mysql高可用集群搭建
  5. UVa 11481 (计数) Arrange the Numbers
  6. linux环境部署ltmj,Linux系统安装与简单配置 图文.docx
  7. 【Java】网络编程
  8. ev10aq190a采集电路图_EV10AQ190A数模转换器
  9. iphone储存空间系统怎么清理_iPhone 储存空间里的“系统”项占用过多怎么办?...
  10. python numpy 索引_Python numpy中布尔索引的问题。
  11. 创建一个cocos2d-x工程添加一个自定义Scene并显示
  12. 装什么软件测试笔记本耐用,我买了新电脑,用什么软件测试比较好?
  13. 入侵检测:User-Agent
  14. 问题 H: LZY碎大石
  15. 刻意练习:Python基础 -- Task07. 文件与文件系统
  16. 工具及方法 - 使用DOS批处理给Windows文件批量改名
  17. python中的请求方法_Python爬虫HTPP请求方法有哪些
  18. python 根据坐标点计算方位角函数
  19. Jekyll 教程——博客功能(blog)
  20. (五)具名和匿名挂载

热门文章

  1. 分享:wkhtmltoimage开源工具的基本应用
  2. 如何利用WGET覆写已存在的档案
  3. 什么样的代码是好代码_什么是好代码?
  4. 数据开放 数据集_除开放式清洗之外:叙述是开放数据门户的未来吗?
  5. 黑苹果 wifi android,动动手指零负担让你的黑苹果连上Wifi
  6. 服务器安装mysql_阿里云服务器上安装MySQL
  7. react数据从本地读取_如何将从Google表格读取的React应用程序部署到Netlify
  8. 软件工程——个人课程总结
  9. Struts2学习---基本配置,action,动态方法调用,action接收参数
  10. Unity AssetBundles and Resources指引 (三) AssetBundle基础