前端时候的问题一直留着没解决,最近面瘫,工作无法顺利进行下去。便来研究了一下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));
解决
好的,废话不说,直切主题。
我们通过CMFCToolBarImages动态加载图片一般有1、句柄(HBITMAP)。2、ICON
我讨论的只是限于 用句柄的方式解决。 icon的动态加载暂时还没研究。
首先说一下图片所需图片的格式,我用了32位的png格式(貌似png本来就是32位 :)),和32位的bmp。
加载:
通过Cimage load一个png, 一般我们认为这样就好了,但是png有一些小小bug,具体可参照:
http://blog.youkuaiyun.com/majiangtao888/article/details/6676611
通过转换函数
注:m_stImage 为CMFCToolBarImages类型。
得到我们所正确的png格式.
之后用只需要添加一行代码,这确实很多朋友包括我一直所琢磨的。
m_stImage.ConvertTo32Bits();
以上就是基本加载方法。
另外我顺便说一下普通Cimages 图片的透明,
在Cimages load 之后
转化格式。
然后 通过
解决