AlphaBlend参数BLENDFUNCTION

1个回答

写回答

嘻嘻来了

2025-06-18 01:10

+ 关注

你是否正在寻找关于alphablend的内容?让我把最完整的东西奉献给你:alphablend是Window自带的GDI函数,在作GUI的时候为了达到更漂亮的效果我们常常用它。BLENDFUNCTION是alphablend用控制透明效果的重要参数。

定义如下:typedefstruct_BLENDFUNCTION{BYTEBlendOp;BYTEBlendFlags;BYTESourceConstantAlpha;BYTEAlphaFormat;}BLENDFUNCTION,*PBLENDFUNCTION,*LPBLENDFUNCTION;BlendOp:这个参数必须也只能为AC_SRC_OVER(0x00),意思就是把源图片覆盖到目标之上。

BlendFlags:必须为0SourceConstantAlpha:简写为SCA,指定源图片的透明度,这个是会和源图片的Alpha通道合并计算的。AlphaFormat:可以填两种,一种是0x00,一种是AC_SRC_ALPHA(0x01)。

填0的话,AlphaBlend据说就和BitBlt一样了,我没有试验过~填1的话,源DC必须是32位的DC不然的话,alphablend会返回参数错误。计算公式(当SCA不是0xFF时):输出像素(R,G,B,A)=源像素(R,G,B,A)*SCA/0xFF目标像素(R,G,B,A)*(1。

0-SCA/0xFF)当SCA是0xFF时,计算公式输出像素(R,G,B,A)=源像素(R,G,B,A)目标像素(R,G,B,A)*(1。0-源像素(A)/0xFF)混合计算公式输出像素(R,G,B)=源像素(R,G,B)*SCA/0xFF目标像素(R,G,B)*(1。

0-源像素(A)/0xFF*SCA/0xFF)全部是PBGRA预乘方式:ValueMeaningAC_SRC_ALPHAThisflagissetwhenthebitmaphasanAlphachannel(thatis,per-pixelalpha)。

NotethattheAPIsusepremultipliedalpha,whichmeansthatthered,greenandbluechannelvaluesinthebitmapmustbepremultipliedwiththealphachannelvalue。

Forexample,ifthealphachannelvalueisx,thered,greenandbluechannelsmustbemultipliedbyxanddividedby0xffpriortothecall。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号