原文链接: 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. jquery hasClass()、is()

    一..hasClass() hasClass()方法是用来检查被选择的元素是否包含指定的class名,其语法: $(selector).hasClass("className"); ...

  2. poj2689 Prime Distance 有难度 埃拉托斯尼斯筛法的运用

    我承认这道很难(对我来说),搞脑子啊,搞了好久,数论刚开始没多久,还不是很强大,思路有点死,主要是我 天赋太差,太菜了,希望多做做有所改善 开始解析: 首先要将在 [ l,u]内的所有素数找出来,还好 ...

  3. ubuntu下配置华为交换机s2016

    因为笔记本没有RS232口,只有装有ubuntu的服务器上有RS232口,于是登录ubuntu 配置连接. 这里使用minicom,当然,Ubuntu源还有个图形界面的gtkterm, cutecom ...

  4. MAC快捷方式记录

    刚刚转到MAC,很多功能发现不能用,总结一下: 刷新页面:command+r 命令行,到行首:control+a 命令行,到行尾:control+e vim,到行尾:shift+$ vim,到行首:s ...

  5. React (native) 相关知识

    container component provider组件 react里的redux进阶玩法 react组件的生命周期 conductor / componentWillMount / render ...

  6. python从sqlite中提取数据到excel

    import sqlite3 as sqlite from xlwt import * import sys def sqlite_get_col_names(cur, select_sql): cu ...

  7. TortoiseGit使用指南

    http://www.360doc.com/content/13/0424/17/9171956_280649187.shtml

  8. JavaScript公共函数

    [在此处输入文章标题] // JScript 文件 /* ================================================================== JS 公 ...

  9. 腾讯云ubuntu安装Mysql并配置远程访问

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6378914.html 一:修改SSH配置 输入 su 进入root模式.修改ssh配置: sudo vi /e ...

  10. SQL Server connect to MySQL SQL Server通过LinkServer访问MySQL数据库,并操作mysql数据库代码

    SQL Server 中需要访问MySQL的数据,可以通过调用MySQL的ODBC驱动,在SQL Server中添加LinkServer的方式实现. 1.从MySQL网站下载最新的MySQL ODBC ...