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

本文探讨了如何使用句柄加载并解决CMFCToolBarImages图标透明问题,提供了从32位PNG到正确透明格式的转换方法,并介绍了Cimages图片透明加载的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端时候的问题一直留着没解决,最近面瘫,工作无法顺利进行下去。便来研究了一下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.youkuaiyun.com/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));
解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值