原文链接: http://blog.sina.com.cn/s/blog_4070692f010003gy.html
 
前补:没想到这个帖子好像挺多人看哪……看来大家都被这个png郁闷的够呛。显示png的代码其实很简单的,声明个CImage 变量,在初始化时候用.Load()读取外部的png图片,然后在OnPaint()里面用.Draw()来绘制就可以了。
 
我把源代码放到mofile了,内不含可执行文件,如果信得过我就请下载来看吧 :)
文件名:MFCHello.rar
尺寸:41KB
 
 
另外,不要指望CImage.LoadFromResource那个废柴函数……跟踪进去看看就会看到其实是调用的Windows Management的LoadImage。这个函数说明第一行如下:
The LoadImage function loads an icon, cursor, animated cursor, or bitmap.
根本就不支持bmp以外的图片类型!
 

    用CImage类可以在MFC里显示半透明图片,这比起那些CBitmap、掩膜掩码之类的东西可以好太多了。网上一搜“VC”“半透明”“PNG”,大堆资料,但是都是泛泛谈到CImage支持PNG半透明,多余一点没说,就好像吃饭那么简单的事情一样根本没必要说。。。
 
    但是捏,我去用CImage做的时候,做好的PNG明明背景是透明的,程序也没有问题,甚至跟踪到了::AlphaBlend(..) ,但是显示的图片就是底色纯白。不要说半透明,连全透明都没有 。。到这一步我还能做什么?
 
    后来找来一个别的网页的Logo,是PNG格式的。在Photoshop里面看了看,背景也是透明的,就试试吧。果然有结果了!Logo文字附近经过羽化的地方是半透明的,而没有任何背景色的纯透明部分却是显示成白色的……这意味着什么呢?

尝试一下:

1. 在PS中新建文件,背景色选 透明

2. 正常贴进去图片后,新建一个图层。把新建图层挪到最下面,用黑色填充,再把图层透明度设置为1%;附带一提,我给中间那个“阴影层”设置的透明度是30%。好了,保存成png,没什么特别的地方了。

3. 效果呢,这样的!半透明成功!!!  别说我图片底色发白,所以显示的不是半透明...底色换成别的颜色一样可以透出来的 

附录:这是我做的png,可以右键另存吧。不过因为图层都合并了,没什么参考价值。仅仅是CImage能用罢了。


结论:大概是纯透明的背景反而被当成不透明了吧……不知道是故意这么设置还是bug来着,反正是给我找了不少麻烦。而且也没找到解决的资料,郁闷。所以放出来共享,不知能不能在某年某月某日被谁搜索到……凄凉啊……

供CImage类显示的半透明PNG文件处理方法的更多相关文章

  1. 使用CImage类 显示图片

    在不适用openCv的一种时候,使用CImage显示图片数据,并且直接嵌入DC框中. 使用CImage 在pic控件里显示图片 void CMyCalLawsDlg::MyShowImage( CIm ...

  2. 用CImage类来显示PNG、JPG等图片

    系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:实现VC单文档.对话框程序显示图片效果 CImage 是VC.NET中定义的一种MFC/ATL共享类,也是A ...

  3. 【VS开发】GDI+ 用CImage类来显示PNG、JPG等图片

    系统环境:Windows 7 软件环境:Visual Studio 2008 SP1 本次目的:实现VC单文档.对话框程序显示图片效果 CImage 是VC.NET中定义的一种MFC/ATL共享类,也 ...

  4. CImage类的介绍与使用

    CImage类的介绍与使用 程序代码下载处:http://download.csdn.net/source/2098910 下载处:http://hi.baidu.com/wangleitongxin ...

  5. CImage类

    CImage封装了DIB(设备无关位图)的功能,因而可以让我们能够处理每个位图像素.这里介绍GDI+和CImage的一般使用方法和技巧. TAG: GDI  CImage  后处理   我们知道,Vi ...

  6. CImage类的使用介绍!

    链接参考:http://www.cnblogs.com/juncheng/articles/1600730.html CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG.GIF. ...

  7. 一个比CBitmap更优秀的类 -- CImage类

    Visual C++的CBitmap类的功能是比较弱的,它只能显示出在资源中的图标.位图.光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP.GIF.JPEG ...

  8. GDI 总结三: CImage类使用

    前言          CImage类是基于GDI+的.可是这里为什么要讲归于GDI? 主要是基于这种考虑: 在GDI+环境中,我们能够直接使用GDI+ ,没多少必要再使用CImage类 可是,假设再 ...

  9. Java显示指定类型的文件

    文件作为存储数据的单元,会根据数据类型产生很多分类,也就是所谓的文件类型.在对数据文件进行操作时,常常需要根据不同的文件类型来作不同的处理.本实例实现的是读取文件夹指定类型的文件并显示到表格控件中.这 ...

随机推荐

  1. linphone

    官方网站 源码下载: linphone, including: oRTP mediastreamer2 liblinphone linphonec linphone (gtk) git clone g ...

  2. Cocon90.Db调用方法

    Cocon90.DB 使用说明 开源库:https://github.com/Cocon90/Cocon90.Db Sqlite位置:https://www.nuget.org/packages/Co ...

  3. C++ 第三课:常量转义字符

    常量转义字符 以下的转义字符使普通字符表示不同的意义. 转义字符 描述 \' 单引号 \" 双引号 \\ 反斜杠 \0 空字符 \a 响铃 \b 后退 \f 走纸 \n 换行 \r 回车 \ ...

  4. linux2.6.30.4内核移植(3)——yaffs文件系统移植

    内核源码:linux2.6.30.4 交叉编译工具:3.4.5 移植linux内核至:TQ2440 工作基础:http://www.cnblogs.com/nufangrensheng/p/36696 ...

  5. java动态代理_aop

    (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理等等,如何去做? 解答:编写一个与目标类具有相同接口的代理类 ...

  6. tpcc-mysql 系列二:进行TPCC测试

    1:开始测试 tpcc_start -h server_host -P port -d database_name -u mysql_user \ -p mysql_password -w wareh ...

  7. Android为ViewPager添加切换动画——自己定义ViewPager

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/44224517 在上篇博客中,我写了一个使用属性动画为ViewPager加入切换动画 ...

  8. Intellij Idea 导入多个maven项目展示在左侧栏Maven Projects

    刚刚要开始从eclipse切换成idea,据说idea功能强大,可是刚刚开始使用很多不习惯,导入第二个maven项目时之前的项目就没了,比较苦恼,下面介绍下导入多个maven项目展示在左侧栏Maven ...

  9. Android API之Telephony.Sms

    Telephony.Sms Contains all text based SMS messages. 包含基于SMS消息的所有文本. 1.sms表结构. _ID _id INTEGER(long) ...

  10. 简单原始的ASP.NET WEBFORM中多文件上传【参考其他资料修改】

    首先是ASPX页面中添加file标签 <input onclick="addFile()" type="button" value="增加&qu ...