c语言编译器黑色背景图片,MFC中CImage加载png图片出现黑色背景的解决办法!

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

void CPicCtrl::DealAlphaChannel(CImage& image)

{

if (image.GetBPP() == 32)

{

for (int i=0; i

{

for (int j=0; j

{

unsigned char* pucColor = reinterpret_cast(image.GetPixelAddress(i , j));

pucColor[0] = pucColor[0] * pucColor[3] / 255;

pucColor[1] = pucColor[1] * pucColor[3] / 255;

pucColor[2] = pucColor[2] * pucColor[3] / 255;

}

}

}

}

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值