关于CMFCToolBarImages图标透明解决方法分享

来源:互联网 发布:如何安装网络电视 编辑:程序博客网 时间:2024/04/30 01:18
前端时候的问题一直留着没解决,最近面瘫,工作无法顺利进行下去。便来研究了一下CMFCToolBarImages图标透明的问题。
好的,废话不说,直切主题。
我们通过CMFCToolBarImages动态加载图片一般有1、句柄(HBITMAP)。2、ICON
 
我讨论的只是限于 用句柄的方式解决。 icon的动态加载暂时还没研究。

首先说一下图片所需图片的格式,我用了32位的png格式(貌似png本来就是32位 :)),和32位的bmp。
    PS:此BMP非彼BMP,这是在24位bmp的基础上加上8位alpha透明色的bmp(alpha透明色我默认为黑色),貌似之前做游戏贴图这方法用的挺多。当然要加载24位bmp的可以通过自己写格式转换类。在3位后面手动添加alpha透明色来实现24位bmp的透明。

加载:
通过Cimage load一个png, 一般我们认为这样就好了,但是png有一些小小bug,具体可参照:
http://blog.csdn.net/majiangtao888/article/details/6676611

通过转换函数

    for(int i = 0; i < m_stImage.GetWidth(); ++i)
    {
        for(int j = 0; j < m_stImage.GetHeight(); ++j
        {
            unsigned char* pucColor = m_stImage.GetPixelAddress(i , j);
            pucColor[0] = pucColor[0] * pucColor[3] / 255;
            pucColor[1] = pucColor[1] * pucColor[3] / 255;
            pucColor[2] = pucColor[2] * pucColor[3] / 255;
        }
     }

注:m_stImage 为CMFCToolBarImages类型。

得到我们所正确的png格式.

之后用只需要添加一行代码,这确实很多朋友包括我一直所琢磨的。
m_stImage.ConvertTo32Bits();
以上就是基本加载方法。


另外我顺便说一下普通Cimages 图片的透明,

在Cimages load 之后

    for(int i = 0; i < m_stImage.GetWidth(); ++i)
    {
        for(int j = 0; j < m_stImage.GetHeight(); ++j
        {
            unsigned char* pucColor = m_stImage.GetPixelAddress(i , j);
            pucColor[0] = pucColor[0] * pucColor[3] / 255;
            pucColor[1] = pucColor[1] * pucColor[3] / 255;
            pucColor[2] = pucColor[2] * pucColor[3] / 255;
        }
     }
转化格式。

然后 通过  m_stImage.Add(CBitMap*, RGB(0,0,0));
解决

原创粉丝点击