在VB中,如果你試著把一只有鳥的圖片放到背景的一棵樹上,你就會發現樹會被鳥遮住一個矩形的區域(即鳥的圖片矩形)。我們可以通過以下方法使圖片上非鳥的其它部分變透明:我們可以利用一個WinAPI函數BitBlt對圖形進行一系列的位操作來達到此目的。
函數聲明:
DeclareFunctionBitBltLib"gdi32"Alias"BitBlt"(ByValhDestDCAsLong,ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLong
參數解釋:
目標環境:hDestDC——目標設備環境;x——左上角;y——頂端;nWidth——寬;nHeight——高源環境:hSrcDC——源設備環境;xSrc——源左上角;ySrc——源頂端;dwRop——位處理操作,如vbSrcAnd;vbSrcAnd;vbSrcCopy;vbSrcErase;vbSrcInvert等
(目標環境或源環境只能是Picture,Form或Printer對象。各單位為象素。)
進行處理之前,我們需要對鳥的圖片進行處理:先復制一份相同的圖形,將其應該透明之處(鳥的背景)設置為黑色(設此圖為sPic),再將另一圖做以下處理:要復制的地方(鳥)設置為黑色,其余地方設置(鳥的背景)為白色(設此圖為Mask)。設樹的圖形為名dPic。
最後,請加入以下代碼:
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,Mask.hdc,0,0,vbScrCopy)
R=BitBlt(dPic.hdc,0,0,sPic.Width,sPic.Height,sPic.hdc,0,0,vbScrInvert)
後記:
1、VB中的PaintPicture方法提供類似功能,但速度不及此方法;
2、在此方法上稍微加入一些代碼,就不難實現動畫的顯示。
3、VB例子中的CallDlls就使用此方法。->