VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 3824|回复: 29

[原创] 使用CStbImage类进行png、jpg、bmp图片的显示

[复制链接]
51_avatar_middle
online_admins 发表于 2015-9-29 21:29:09 | 显示全部楼层 |阅读模式


本篇文章作者:

论坛ID:xunonxyz

现已投稿到vc驿站,欢迎大家的品鉴!


本篇文章已被采纳为原创作品,请作者联系客服邮箱 service@cctry.com 获取奖励!

本次活动说明详见:https://www.cctry.com/thread-59248-1-1.html



        软件开发中显示图形必不可少,但是对于MFC来说,显示 png、jpg 等图片显得比较复杂,如显示个png还得需要需要这样那样的库,感觉实在很不方便。之前笔者曾介绍过使用 cximage 来进行图像显示,不过还是得经过这样那样的配置,虽然目的达到了,不过不够简单,好者发现了 CStbImage 这样轻量级的库,下载地址: http://nothings.org/,稍等封装就变得简单易用了,支持 jpg、bmp、png(支持透明通道) 等多种图形格式,支持从磁盘加载和从资源加载,很方便吧?

使用方法如下:

1、新建对话框项目,在项目中添加 CStbImage.h、CStbImage.cpp、stb_image.c 这三个文件,同时包含 CStbImage.h、CStbImage.cpp 这两个文件到项目中。

2、创建 CStbImage 类型的成员变量:
CStbImage m_testImagePng,m_testImageJpg,m_testImageBmp;

3、对话框的初始化函数 OnInitDialog() 中加载图像,示例代码中只演示了从磁盘加载图像,也可以从资源加载图像。
  1. TCHAR pBuf[MAX_PATH] = {0};                                               
  2. GetCurrentDirectory(MAX_PATH, pBuf);   

  3. CString pngPath(pBuf);
  4. pngPath += _T("\\test.png");
  5. m_testImagePng.LoadImage(pngPath);

  6. CString jpgPath(pBuf);
  7. jpgPath += _T("\\test.jpg");
  8. m_testImageJpg.LoadImage(jpgPath);

  9. CString bmpPath(pBuf);
  10. bmpPath += _T("\\test.bmp");
  11. m_testImageBmp.LoadImage(bmpPath);
复制代码


4、在 OnPaint 函数中显示图像:
  1. CRect rc;
  2. CPaintDC dc(this);
  3. if (m_testImagePng.IsValid())
  4. {
  5.         rc.left = 0;
  6.         rc.top = 0;
  7.         rc.right = m_testImagePng.GetWidth();
  8.         rc.bottom = m_testImagePng.GetHeight();
  9.         m_testImagePng.DrawImage(dc.GetSafeHdc(), rc);
  10. }

  11. if (m_testImageJpg.IsValid())
  12. {
  13.         rc.left += m_testImagePng.GetWidth();
  14.         rc.top = 0;
  15.         rc.right = rc.left + m_testImageJpg.GetWidth();
  16.         rc.bottom = rc.top + m_testImageJpg.GetHeight();
  17.         m_testImageJpg.DrawImage(dc.GetSafeHdc(), rc);
  18. }

  19. if (m_testImageBmp.IsValid())
  20. {
  21.         rc.left += m_testImageJpg.GetWidth();
  22.         rc.top = 0;
  23.         rc.right = rc.left + m_testImageBmp.GetWidth();
  24.         rc.bottom = rc.top + m_testImageBmp.GetHeight();
  25.         m_testImageBmp.DrawImage(dc.GetSafeHdc(), rc);
  26. }
复制代码


程序运行截图:
使用CStbImage类进行png、jpg、bmp图片的显示

相关工程源码下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复







上一篇:网络游戏加密解密
下一篇:用lua寫木馬 這個點子怎麼樣?
85_avatar_middle
online_vip 发表于 2015-9-30 09:27:08 | 显示全部楼层
多谢楼主分享使用CStbImage类进行png、jpg、bmp图片的显示
79_avatar_middle
在线会员 发表于 2015-9-30 11:30:06 | 显示全部楼层
拿来研究一下,谢谢分享
02_avatar_middle
在线会员 发表于 2015-9-30 14:09:57 | 显示全部楼层
多谢分享,
45_avatar_middle
在线会员 发表于 2015-9-30 15:16:53 | 显示全部楼层
不明觉厉使用CStbImage类进行png、jpg、bmp图片的显示
87_avatar_middle
online_vip 发表于 2015-9-30 21:22:14 | 显示全部楼层
好叼呀- -我擦  
60_avatar_middle
在线会员 发表于 2015-9-30 22:35:28 | 显示全部楼层
《使用CStbImage类进行png、jpg、bmp图片的显示》mark
18_avatar_middle
在线会员 发表于 2015-10-3 19:29:27 | 显示全部楼层
多谢分享
01_avatar_middle
在线会员 发表于 2015-10-15 19:28:08 | 显示全部楼层
楼主辛苦了!!!
96_avatar_middle
在线会员 发表于 2015-10-19 16:48:34 | 显示全部楼层
很不错! 学习学习
25_avatar_middle
在线会员 发表于 2015-10-19 20:57:38 | 显示全部楼层
学习学习
09_avatar_middle
online_vip 发表于 2015-10-19 22:34:43 | 显示全部楼层
好叼呀- -我擦  
32_avatar_middle
online_vip 发表于 2015-10-28 08:26:57 | 显示全部楼层
多谢楼主分享
22_avatar_middle
在线会员 发表于 2015-10-28 13:45:05 | 显示全部楼层
流程和direcui很像
49_avatar_middle
online_vip 发表于 2015-10-29 09:30:28 | 显示全部楼层
老大把关必定是精品
49_avatar_middle
online_vip 发表于 2015-10-29 09:39:52 | 显示全部楼层
老大把关必定是精品
06_avatar_middle
在线会员 发表于 2015-10-29 10:51:29 | 显示全部楼层
拿来研究一下,谢谢分享
33_avatar_middle
在线会员 发表于 2015-11-8 23:18:46 | 显示全部楼层
正要用,好好学习一下!
16_avatar_middle
在线会员 发表于 2015-11-9 08:48:49 | 显示全部楼层
多谢分享
83_avatar_middle
在线会员 发表于 2015-11-11 10:37:16 | 显示全部楼层
效率如何呢?????
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-21 16:39

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表