MFC中CImage加载png图片出现黑色背景的解决办法!

       最近在写一个图片控件,要能加载除了bmp之外的格式的图片,要求最好能加载png,能响应鼠标左键按下、弹起、滑过(鼠标通过)等等消息。
       我让控件继承CWnd,而后再在XTP的浮动面板中做为子窗口测试如下加载图片的效果。结果发现,无论我是否对图片作了透明通道的处理,背景色都是黑色,这个问题困扰我好几天,网上各类找资料也没有解决。终于今天找到了问题在哪里了:stdafx.h中各类关于版本的宏,定义的版本过低了,须要0x0500及以上才能够支持透明特性。改为0x0500及以上就能够了(虽然支持透明特性,可是仍是要作预乘,不然会有白边)。
       其实这个知识点也有人提到,我看了看本身作实验的那个stdafx.h里面定义的版本没问题,觉得本身出问题的那个工程的stdafx.h也没问题(由于这个工程不是我建立的,后来才知道是XTP向导生成的工程)。后来发现他们定义的版本竟然不同,都是向导生成的,不过一个是MFC自带的向导(VS05),一个是XTP工程的向导,后者定义的版本会比较低。
       呼呼,今日先传个预乘的代码,待接口所有整理好了再所有上传:ide

void CPicCtrl::DealAlphaChannel(CImage& p_w_picpath)
{
    if (p_w_picpath.GetBPP() == 32)
    {
        for (int i=0; i<p_w_picpath.GetWidth(); i++)
        {
            for (int j=0; j<p_w_picpath.GetHeight(); j++)
            {
                unsigned char* pucColor = reinterpret_cast<unsigned char*>(p_w_picpath.GetPixelAddress(i , j));
                pucColor[0] = pucColor[0] * pucColor[3] / 255;
                pucColor[1] = pucColor[1] * pucColor[3] / 255;
                pucColor[2] = pucColor[2] * pucColor[3] / 255;
            }
        }
    }
}
相关文章
相关标签/搜索