您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)blendfunction結(jié)構(gòu)參數(shù)怎么用,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
BLENDFUNCTION通過指定源和目標(biāo)位圖的透明混合參數(shù)來控制透明混合,AlphaBlend是Window自帶的GDI函數(shù),在用GUI的時候?yàn)榱诉_(dá)到更漂亮的效果我們常常用它,它的參數(shù)之一的類型就是BLENDFUNCTION。
blendfunction結(jié)構(gòu)
typedefstruct_BLENDFUNCTION{
BYTEBlendOp;
BYTEBlendFlags;
BYTESourceConstantAlpha;
BYTEAlphaFormat;
}BLENDFUNCTION,*PBLENDFUNCTION,*LPBLENDFUNCTION;
blendfunction參數(shù)編輯
BlendOp指定源混合操作。唯一的源和目標(biāo)的混合方式已定義為AC_SRC_OVER;
BlendFlags必須是0;
SourceConstantAlpha指定一個alpha透明度值,這個值將用于整個源位圖;該SourceConstantAlpha值與源位圖的每個像素的alpha值組合;如果設(shè)置為0,就會假定你的圖片是透明的;如果需要使用每像素本身的alpha值,設(shè)置SourceConstantAlpha值255(不透明);
AlphaFormat這個參數(shù)控制源和目標(biāo)的解析方式,AlphaFormat參數(shù)有以下值:
AC_SRC_ALPHA:這個值在源有Alpha通道時(也就是操作的圖本身帶有透明通道信息時),提醒系統(tǒng)API調(diào)用函數(shù)前必須預(yù)先乘以alpha值,也就是說位圖上某個像素位置的red、green、blue通道值必須先與alpha相乘。例如,如果alpha透明值是x,那么red、green、blue三個通道的值必須乘以x并且再除以255(因?yàn)閍lpha的值的范圍是0~255),之后才能被調(diào)用。
應(yīng)用備注編輯
1、當(dāng)AlphaFormat參數(shù)的值是AC_SRC_ALPHA,那么源位圖必須是32位深,否則的話,AlphaBland函數(shù)將調(diào)用失敗
2、當(dāng)BlendOp參數(shù)是AC_SRC_OVER時,源位圖根據(jù)alpha透明度值直接覆蓋在目標(biāo)位圖之上
3、如果源位圖不帶有透明度信息(那樣的話,AC_SRC_ALPHA不設(shè)置),將由SourceConstanAlpha的值來決定如何混合源位圖與目標(biāo)位圖,如下表中所示。表中SCA代表SourceConstantAlpha的值,同樣,SCA除以了255,因?yàn)樗姆秶菑?到255.
Dst.Red=Src.Red*(SCA/255.0)+Dst.Red*(1.0-(SCA/255.0))
Dst.Green=Src.Green*(SCA/255.0)+Dst.Green*(1.0-(SCA/255.0))
Dst.Blue=Src.Blue*(SCA/255.0)+Dst.Blue*(1.0-(SCA/255.0))
在這種情況下,如果目標(biāo)位圖有透明度信息,那么混合方式將按照下面的公式來:
Dst.Alpha=Src.Alpha*(SCA/255.0)+Dst.Alpha*(1.0-(SCA/255.0))
關(guān)于“blendfunction結(jié)構(gòu)參數(shù)怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。