簡介
函式功能
該函式用來顯示具有指定透明度的圖像。
函式原型
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:指定目標矩形區域的寬度,按邏輯單位。
hHeightdest:指向目標矩形區域的高度,按邏輯單位。
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不支持鏡像。如果源或目標區域的寬度或高度為負數,那么調用將失敗。
速查
Windows NT:5.0及以上版本、Windows:98及以上版本、Windows CE:5.0及以上版本支持;頭檔案:wingdi.h;庫檔案:作為一個資源包含在msimg32.dll中。
如何通過API函式AlphaBlend實現vb中的調用?
AlphaBlend函式的定義在 msimg32.dll中,一般Win98、Win2000都帶了這個庫,在編程之前你可以先察看一下該檔案是否存在。AlphaBlend() 在 Visual Basic 6.0 中的套用
聲明
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal tx As Long, ByVal ty As Long, ByVal Tw As Long, ByVal Th As Long, ByVal hdc As Long, ByVal sx As Long, ByVal sy As Long, ByVal sw As Long, ByVal sh As Long, ByVal BLENDFUNCT As Long) As Long
實例
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
Private Sub Form_Load()
Picture1.AutoSize = True
Picture1.AutoRedraw = True
Picture2.AutoSize = True
Picture2.AutoRedraw = True
End Sub
Private Sub Command1_Click()
Picture1.Picture = LoadPicture("C:\1.bmp")
Picture2.Picture = LoadPicture("C:\2.bmp")
AlphaBlend Picture1.hdc, 10, 10, 100, 100, Picture2.hdc, 20, 20, 100, 100, &H10000 * 128
Picture1.Refresh
End Sub