AlphaBlend

 

AlphaBlend

在圖像處理中,Alpha用來衡量一個像素或圖像的透明度。在非壓縮的32位RGB圖像中,每個像素是由四個部分組成:一個Alpha通道和三個顏色分量(R、G和B)。當Alpha值爲0時,該像素是完全透明的,而當Alpha值爲255時,則該像素是完全不透明。   
  Alpha混色是將源像素和背景像素的顏色進行混合,最終顯示的顏色取決於其RGB顏色分量和Alpha值。它們之間的關係可用下列公式來表示
  顯示顏色 = 源像素顏色 X alpha / 255 + 背景顏色 X (255 - alpha) / 255

函數功能

  該函數用來顯示具有指定透明度的圖像。

函數原型

  AlphaBlend(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int hHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int nHeightSrc,BLENDFUNCTION blendFunction);

參數

  hdcDest:指向目標設備環境的句柄。
  nXoriginDest:指定目標矩形區域左上角的X軸座標,按邏輯單位。
  nYOriginDest:指定目標矩形區域左上角的Y軸座標,按邏輯單位。
  nWidthDest:指定目標矩形區域的寬度,按邏輯單位。
  hHeghtdest:指向目標矩形區域高度的句柄,按邏輯單位。
  hdcSrc:指向源設備環境的句柄。
  nXOriginSrc:指定源矩形區域左上角的X軸座標,按邏輯單位。
  nYOriginSrc:指定源矩形區域左上角的Y軸座標,按邏輯單位。
  nWidthSrc:指定源矩形區域的寬度,按邏輯單位。
  nHeightSrc:指定源矩形區域的高度,按邏輯單位。
  blendFunction:指定用於源位圖和目標位圖使用的alpha混合功能,用於整個源位圖的全局alpha值和格式信息。源和目標混合功能當前只限爲AC_SRC_OVER。
  最後一個參數blendFunction是一個BLENDFUNCTION結構。BLENDFUNCTION結構控制源和目標位圖的混合方式,它的BlendOp字段指明瞭源混合操作,但只支持AC_SRC_OVER,即根據源alpha值把源圖像疊加到目標圖像上。OpenGL的alpha混合還支持其他的方式,如常量顏色源。下一個字段BlendFlags必須是0,也是爲以後的應用保留的。最後一個字段AlphaFormat有兩個選擇:0表示常量alpha值,AC_SRC_ALPHA表示每個像素有各自的alpha通道。
  

函數編輯

編輯本段運用

  1.如果AlphaFormat字段爲0,源位圖中的所有像素使用同樣的常量alpha值,即SourceConstantAlpha字段中的值,該值實際上是0和255,而不是0和1。這裏0表示完全透明,255表示完全不透明。目標像素以255-SourceConstantAlpha值作爲alpha值。
  2. 如果AlphaFormat字段的值是AC_SRC_ALPHA,源設備表面的每個像素必須有各自的alpha通道。即,必須是32-bpp的物理設備上下文,或是選中了32-bpp DDB和DIB段的內存設備上下文。這些情況下,每個源像素有4個8位通道:紅、綠、藍和alpha。每個像素的alpha通道和SourceConstantAlpha字段一起用於把源和目標混合起來。實際用於計算的運算式如下:
  Tmp.Red = Src.Red * SourceConstantAlpha / 255;
  Tmp.Green = Src.Green * SourceConstantAlpha / 255;
  Tmp.Blue = Src.Blue * SourceConstantAlpha / 255;
  Tmp.Alpha = Src.Alpha * SourceConstantAlpha / 255;
  Beta = 255 – Tmp.alpha;
  Dst.Red = Tmp.Red + Round((Beta * Dst.Red )/255);
  Dst.Green = Tmp.Green + Round((Beta * Dst.Green)/255);
  Dst.Blue = Tmp.Blue + Round((Beta * Dst.Blue )/255);
  Dst.Alpha = Tmp.Alpha + Round((Beta * Dst.Alpha)/255);

返回值

  如果函數執行成功,那麼返回值爲TRUE;如果函數執行失敗,那麼返回值爲FALSE。
  Windows NT:若想獲取更多錯誤信息,請調用GetLastError函數。
  

解決像素問題

備註

  如果源矩形區域與目標矩形區域大小不一樣,那麼將縮放源位圖與目標矩形區域匹配。如果使用SetStretchBltMode函數,那麼iStretchMode的值是BLACKONWHITE和WHITEONBLACK,在本函數中,iStretchMode的值自動轉換成COLORONCOLOR。目標座標使用爲目標設備環境當前指定的轉換方式進行轉換。源座標則使用爲源設備環境指定的當前轉換方式進行轉換。如果源設備環境標識爲增強型圖元文件設備環境,那麼會出錯(並且該函數返回FALSE)。如果目標和源位圖的色彩格式不同,那麼AlphaBlend將源位圖轉換以匹配目標位圖。
  AlphaBlend不支持鏡像。如果源或目標區域的寬度或高度爲負數,那麼調用將失敗。

 

發佈了15 篇原創文章 · 獲贊 14 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章