zoukankan      html  css  js  c++  java
  • 供CImage类显示的半透明PNG文件处理方法

    原文链接: 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(..) ,但是显示的图片就是底色纯白。不要说半透明,连全透明都没有供CImage类显示的半透明PNG文件处理方法 。。到这一步我还能做什么?
     
        后来找来一个别的网页的Logo,是PNG格式的。在Photoshop里面看了看,背景也是透明的,就试试吧。果然有结果了!Logo文字附近经过羽化的地方是半透明的,而没有任何背景色的纯透明部分却是显示成白色的……这意味着什么呢?

    尝试一下:

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

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

    3. 效果呢,这样的!半透明成功!!!  别说我图片底色发白,所以显示的不是半透明...底色换成别的颜色一样可以透出来的 供CImage类显示的半透明PNG文件处理方法

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


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

  • 相关阅读:
    hdu 1240 Asteroids!
    hdu 1253 胜利大逃亡
    hdu 1035 Robot Motion
    hdu 1181 变形课
    hdu 1548 A strange lift
    DFS Sum It Up
    hdu 3278 Catch That Cow
    hdu 1312 Red and Black
    ACM菜鸟
    eclipse新建安卓项目点击finish后窗口无法关闭
  • 原文地址:https://www.cnblogs.com/huhu0013/p/4624321.html
Copyright © 2011-2022 走看看