日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

BLENDFUNCTION

 昵稱15753510 2014-02-13
   AlphaBlend是Window自帶的GDI函數(shù),在作GUI的時候為了達到更漂亮的效果我們常常用它。 
  這種結構的混合控制通過指定源和目標位圖的混合功能?!?br>  typedef struct _BLENDFUNCTION {
  BYTE BlendOp;
  BYTE BlendFlags;
  BYTE SourceConstantAlpha;
  BYTE AlphaFormat;
  } BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;
  BlendOp 指定源混合操作。目前,唯一的源和目標的混合方式已定義為AC_SRC_OVER; 
  BlendFlags 必須是0; 
  SourceConstantAlpha 指定一個alpha透明度值,這個值將用于整個源位圖;該SourceConstantAlpha值與源位圖的每個像素的alpha值組合;如果設置為0,就會假定你的圖片是透明的;如果需要使用每像素本身的alpha值,設置SourceConstantAlpha值255(不透明); 
  AlphaFormat 這個參數(shù)控制源和目標的解析方式,AlphaFormat參數(shù)有以下值:
  AC_SRC_ALPHA: 這個值在源或者目標本身有Alpha通道時(也就是操作的圖本身帶有透明通道信息時),提醒系統(tǒng)API調用函數(shù)前必須預先乘以alpha值,也就是說位圖上某個像素位置的red、green、blue通道值必須先與alpha相乘。例如,如果alpha透明值是x,那么red、green、blue三個通道的值必須乘以x并且再除以255(因為alpha的值的范圍是0~255),之后才能被調用。
  備注:
  1、當AlphaFormat參數(shù)的值是AC_SRC_ALPHA,那么源位圖必須是32位深,否則的話,AlphaBland函數(shù)將調用失敗
  2、當BlendOp參數(shù)是AC_SRC_OVER時,源位圖根據(jù)alpha透明度值直接覆蓋在目標位圖之上
  3、如果源位圖不帶有透明度信息(那樣的話,AC_SRC_ALPHA不設置),將由SourceConstanAlpha的值來決定如何混合源位圖與目標位圖,如下表中所示。表中SCA代表SourceConstantAlpha的值,同樣,SCA除以了255,因為它的范圍是從0到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))
  在這種情況下,如果目標位圖有透明度信息,那么混合方式將按照下面的公式來:
  Dst.Alpha = Src.Alpha * (SCA/255.0) + Dst.Alpha * (1.0 - (SCA/255.0))
  4、如果源位圖沒有用SourceConstantAlpha參數(shù)值(那表示該參數(shù)等于255),每一個像素的透明度將決定源位圖和目標位圖的混合結果,如下所示:
  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
  在這種情況下,如果如果目標位圖有透明度信息,那么混合方式將按照下面的公式來:
  Dest.alpha = Src.Alpha + (1 - SrcAlpha) * Dst.Alpha
  5、如果源位圖既有SourceConstantAlpha值(也就是它的值不是255),每個像素又有透明度值,那么源位圖的每一個像素將首先乘以SourceConstantAlpha的值,然后根據(jù)每個像素的透明度值混合,如下表中所示。同樣,SourceConstantAlpha除以了255,因為它的范圍是從0到255.
  Src.Red = Src.Red * SourceConstantAlpha / 255.0;
  Src.Green = Src.Green * SourceConstantAlpha / 255.0;
  Src.Blue = Src.Blue * SourceConstantAlpha / 255.0;
  Src.Alpha = Src.Alpha * SourceConstantAlpha / 255.0;
  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
  Dst.Alpha = Src.Alpha + (1 - Src.Alpha) * Dst.Alpha 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多