如題,我在網上搜到兩篇文章,但償試了兩天都沒解決,請各位幫忙解題。。分不夠的話可以再加
第一篇文章:http://www.sudu.cn/info/html/edu/database/20071225/21843.html
文章的代碼如下:
long origcolor
long origmode
long savedc
long maskdc
long invdc
long resultdc
long hsavebmp
long hmaskbmp
long hinvbmp
long hresultbmp
long hsaveprevbmp
long hmaskprevbmp
long hinvprevbmp
long hdestprevbmp
long hsrcdc
long hdestdc
long nwidth,nheight
long transcolor
long ret,hbitmap
string ls_tmp
hsrcdc = CreateCompatibleDC(GetDC(handle(p_2)))
hdestdc = GetDC(handle(p_1))
nwidth = unitstopixels(p_2.width, xunitstopixels!)
nheight = unitstopixels(p_2.height, yunitstopixels!)
//這里由于pb默認采用pb unit單位,而api處理度量單位采用象素單位因此需要進行單位轉換
transcolor =0
//此處配置要透明的rgb顏色,此處為黑色;
ls_tmp = "zp.bmp"
hbitmap = LoadImage(0, ls_tmp, 0, 0, 0, 16)
savedc = CreateCompatibleDC(hdestdc)
maskdc = CreateCompatibleDC(hdestdc)
invdc = CreateCompatibleDC(hdestdc)
resultdc = CreateCompatibleDC(hdestdc)
hmaskbmp = CreateBitmap(nwidth, nheight, 1, 1, 0)
hinvbmp = CreateBitmap(nwidth, nheight, 1, 1, 0)
hresultbmp = CreateCompatibleBitmap(hdestdc, nwidth, nheight)
hsavebmp = CreateCompatibleBitmap(hdestdc, nwidth, nheight)
ret = SelectObject(hsrcdc, hbitmap)
hsaveprevbmp = SelectObject(savedc, hsavebmp)
hmaskprevbmp = SelectObject(maskdc, hmaskbmp)
hinvprevbmp = SelectObject(invdc, hinvbmp)
hdestprevbmp = SelectObject(resultdc, hresultbmp)
origcolor = SetBKColor(hsrcdc,transcolor)
ret = BitBlt(maskdc, 0, 0, nwidth, nheight, hsrcdc, 0, 0, 13369376 )
//注:13369376為bitblt函式的引數-srccopy,表示將源矩形區域直接拷貝到目標矩形區域
transcolor = SetBKColor(hsrcdc, origcolor)
ret = BitBlt(invdc, 0, 0, nwidth, nheight, maskdc, 0, 0, 3342344)
//注:3342244為bitblt函式的引數-notsrccopy,表示將源矩形區域顏色取反后拷貝到目標矩形區域
ret = BitBlt(resultdc, 0, 0, nwidth, nheight, hdestdc, 0, 0, 13369376)
ret = BitBlt(resultdc, 0, 0, nwidth, nheight, maskdc, 0, 0, 8913094)
//注:8913094為bitblt函式的引數-srcand,表示通過使用and(和)運算子來將源和目標矩形區域內的顏色合并
ret = BitBlt(savedc,0, 0, nwidth, nheight, hsrcdc, 0,0, 13369376)
ret = BitBlt(savedc, 0, 0, nwidth, nheight, invdc, 0, 0, 8913094)
ret = BitBlt(resultdc, 0, 0, nwidth, nheight, savedc, 0, 0, 6684742)
//注:6684742為bitblt函式的引數-srcinvert,表示通過使用布爾型的xor(異或)運算子將源和目標矩形區域的顏色合并
ret = BitBlt(hdestdc, 0, 0, nwidth, nheight, resultdc, 0, 0, 13369376)
ret = SelectObject(savedc, hsaveprevbmp)
ret = SelectObject(resultdc, hdestprevbmp)
ret = SelectObject(maskdc, hmaskprevbmp)
ret = SelectObject(invdc, hinvprevbmp)
ret = DeleteObject(hsavebmp)
ret = DeleteObject(hmaskbmp)
ret = DeleteObject(hinvbmp)
ret = DeleteObject(hresultbmp)
ret = DeleteDC(savedc)
ret = DeleteDC(invdc)
ret = DeleteDC(maskdc)
ret = DeleteDC(resultdc)
ret = ReleaseDC(handle(p_1),hsrcdc)
ret = ReleaseDC(handle(p_3),hdestdc)
第二篇文章:http://www.cndw.com/tech/program/2006051873498.asp
內容如下:
在 VB 中,如果你試著把一只有鳥的圖片放到背景的一棵樹上,你就會發現樹會被鳥遮
住一個矩形的區域(即鳥的圖片矩形)。我們可以通過以下方法使圖片上非鳥的其它部
分變透明:我們可以利用一個 WinAPI 函式 BitBlt 對圖形進行一系列的位操作來達到
此目的。
函式宣告:
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, _
ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal dwRop As Long) As Long
引數解釋:
目標環境: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 就使用此方法。
uj5u.com熱心網友回復:
怎么沒人來解題啊??uj5u.com熱心網友回復:
你想做什么?你想我們做什么?
uj5u.com熱心網友回復:
把它轉成pb?uj5u.com熱心網友回復:
加我的QQ\MSN啊,:)轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/106288.html
標籤:控件與界面
