原文链接: 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. 使用jsp内置对象request获取表单提交中文内容乱码的解决办法

    page1.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...

  2. 从MyEclipse到IntelliJ IDEA ——让你脱键盘,全键盘操作

    从MyEclipse到IntelliJ IDEA ——让你脱键盘,全键盘操作 从MyEclipse转战到IntelliJ IDEA的经历 我一个朋友写了一篇“从Eclipse到Android Stud ...

  3. sql assist字符匹配智能提示

  4. PASCAL知识

    API Index http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delph ...

  5. Exchanger的使用

    两个线程可以交换对象的同步点.每个线程都在进入 exchange 方法时给出某个对象,并接受其他线程返回时给出的对象. 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先 ...

  6. ES6学习笔记十:模块的导入、导出

    一:模块导入 1) import { 要导入的属性.方法民 } from '模块路径'; 2)该种方法需要有配置文件,指明模块所在路径 import { 要导入的属性.方法民 } from '模块名' ...

  7. CSS3实现文字过渡移动

    1.在需要移动的对象上加上a标签,并定义CSS <a><img src="/skin/images/ico-weixin.png" /><span&g ...

  8. 【DB2】慎用nickname,可能会引起效率较低

    在使用db2的时候,在A库建立了nickname,指向B库的物理表(数据量800多万),现在使用程序(JDBC)连接数据库,并计算指标,但是发现效率很低. 解决办法: 删除A库中的nickname,在 ...

  9. django之异常错误2(Error was: No module named sqlite3.base)

    具体错误代码为: C:\djangoweb\helloworld>manage.py syncdbTraceback (most recent call last):  File "C ...

  10. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...