複製鏈接
請複製以下鏈接發送給好友

AlphaBlend

鎖定
AlphaBlend函數,用來顯示具有指定透明度的圖像。
中文名
AlphaBlend
外文名
AlphaBlend
函數功能
顯示具有指定透明度的圖像
nXoriginDest
X軸座標
nYOriginDest
Y軸座標

目錄

AlphaBlend簡介

AlphaBlend函數功能

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

AlphaBlend函數原型

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

AlphaBlend參數

該函數用來顯示具有指定透明度的圖像:指向目標設備環境的句柄。
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通道。

AlphaBlend運用

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);

AlphaBlend返回值

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

AlphaBlend其他信息

如果源矩形區域與目標矩形區域大小不一樣,那麼將縮放源位圖與目標矩形區域匹配。如果使用SetStretchBltMode函數,那麼iStretchMode的值是BLACKONWHITE和WHITEONBLACK,在本函數中,iStretchMode的值自動轉換成COLORONCOLOR。目標座標使用為目標設備環境當前指定的轉換方式進行轉換。源座標則使用為源設備環境指定的當前轉換方式進行轉換。如果源設備環境標識為增強型圖元文件設備環境,那麼會出錯(並且該函數返回FALSE)。如果目標和源位圖的色彩格式不同,那麼AlphaBlend將源位圖轉換以匹配目標位圖。
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 中的應用

AlphaBlend聲明

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

AlphaBlend實例

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