关于CImage 不能正确显示带ALPHA通道的 32BPP 图片

使用CImage 的alphablend函数描画32为Png 图片时发现不能够正确的按每个像素的透明度显示。

调查发现:

不能正确显示时的环境:

背景图:黑色

Png图:alpha 值为0,但是这一点的RGB值不是黑色

根据MSDN 关于BLENDFUNCTION部分关于alphablend介绍这种情况下的公式如下:

If the source bitmap does not use SourceConstantAlpha (that is, it equals 0xFF), the per-pixel alpha determines the blend of the source and destination bitmaps, as shown in the following table.

Dst.Red= Src.Red+ (1 - Src.Alpha) * Dst.Red
Dst.Green= Src.Green+ (1 - Src.Alpha) * Dst.Green
Dst.Blue= Src.Blue+ (1 - Src.Alpha) * Dst.Blue

造成各个问题的原因是alphablend实现的方法问题。

如果才用下面的公式就应该没有问题了:

Dst.Red= Src.Red*Src.Alpha+ (1 - Src.Alpha) * Dst.Red
Dst.Green= src.Green*Src.Alpha+ (1 - Src.Alpha) * Dst.Green
Dst.Blue= Src.Blue*Src.Alpha+ (1 - Src.Alpha) * Dst.Blue

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值