国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

制作圖像的Mask圖

制作圖像的Mask圖

更新時(shí)間:2019-07-04 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

制作Mask圖形的目的是為了把某一個(gè)圖,去除其背景顏色,而將之畫在另一個(gè)圖上面,比如說有一張方形的BitMap圖,上有一枝筆,而其背景是藍(lán)色,如何將這筆畫在另一張圖上,而且筆原先的藍(lán)背景不會(huì)畫上去。
  這個(gè)問題便得制造出筆的Mask圖,與Invert的Mask圖,該Mask圖長(zhǎng)像是:背景顏色(本例是藍(lán)色)變成白色,其他顏色變成黑色,而Inver的Mask圖則反之。

  本范例使用GetMaskPic()來取得Mask圖的Handle of Memory DC (hMaskDC),用GetInvertMaskPic()來取得Invert Mask圖的Handle of Memory DC (hInvertMaskDC),事實(shí)上,如果想要二者同時(shí)取得實(shí)在沒有必要分成兩個(gè)函式來做,只要一個(gè)就好了,這里只是一個(gè)范例,告訴大家如果想要個(gè)別取得時(shí)該如何做啦。

我將這原理簡(jiǎn)單的說明一下:

1.hdcMono = CreateCompatibleDC(0)
  產(chǎn)生一個(gè)Memory DC(與目前螢?zāi)籬DC相容),此時(shí)該MemoryDC繪的大小只有一個(gè)單色pixel

2.hbmpMono = CreateCompatibleBitmap(hdcMono, dx, dy)
  產(chǎn)生一個(gè)大小是dx*dy 的Bitmap,而它的第一個(gè)叁數(shù)是Memory DC所以是單色的BitMap

3.hbmpOld = SelectObject(hdcMono, hbmpMono)
  這個(gè)動(dòng)作一做,該hdcMono的繪圖區(qū)就變成hbmpMono了,也就是說可以想像hdcMono有一個(gè)大小是dx*dy(by pixels)的繪圖區(qū),在其上的畫圖會(huì)反映到hBmpMono之上

4.picBack.AutoRedraw = True
  設(shè)定picBack.hDc指的是memory中的那份背景圖

5.picBack.BackColor = RGB(255, 255, 255)
  設(shè)picBack的背景是白色,如此也會(huì)同時(shí)也使Window background Color變成白色,這邊要提出說明的是,vb的BackColor指的是什麼大家都知道,但Window中的BackGround Color卻不太相同,Window的BackGround Color指的是在其上畫線條或Print文字時(shí),填充於線條或文字外面的顏色,vb中一律使用Form/pictureBox的BackColor來填充,也就是說當(dāng)BackColor變了時(shí),同時(shí)也是讓W(xué)indow中所謂Background Color變,可以用以下程式一試便知:
  me.backcolor = RGB(255,255,255)
  Call SetBkColor(me.hDc, RGB(255,0,0))
  me.print "haha"

6.ColorBack = SetBkColor(picBack.hDC, TColor)
   設(shè)定PicBack的Window背景顏色成TColor,同時(shí)傳回原本的Window BackGround Color存於ColorBack(先前第5步的設(shè)定,會(huì)使這ColorBack存的是白色的值)

7.BitBlt hdcMono, 0, 0, dx, dy, picBack.hDC, 0, 0, vbSrcCopy
  將picBack的背景圖Copy 到memory DC之中,這邊有一個(gè)重點(diǎn),picBack是彩色圖,但是目前記憶體Dc存的是單色的圖,這麼Copy下去的結(jié)果會(huì)變成:PicBack的BackGround Color(即Tcolor)會(huì)變成1(白色),其他顏色變成0(黑色)。注:如果memory dc的圖是彩色,就不會(huì)如此,而memory dc的圖如何變彩色,那便是Step 3. SelectObject時(shí)傳入一個(gè)彩色的hBitmap,而彩色的hBitmap又如何做到,那便是在Step 2.時(shí)CreateCompatibleBitmap的第一個(gè)叁數(shù),不傳Memory DC,而傳一個(gè)彩色的hDc,如form1.hdc (if 是彩色螢?zāi)?

8.Call SetBkColor(picBack.hDC, ColorBack)
  window BackGround再設(shè)回原本的ColorBack之顏色(在這里是白色)

9.BitBlt picBack.hDC, 0, 0, dx, dy, hdcMono, 0, 0, vbSrcCopy
  將Memory dc內(nèi)的圖再畫回PicBack的背景圖中,相同的,單色圖如何放入彩色圖呢?原則似乎是(這是我的testing,Win32 help中沒有說明): 1(白色)會(huì)以目的hdc(在此是picack.hdc)之window Background color來填(此時(shí)是ColorBack = 白色) ,而 0(黑色)就以黑色畫上去,如此一來,一個(gè)圖的Mask不就造出來了嗎?

10.將Mask的圖放到另一個(gè)彩色的Memory DC之中
  hMaskDC = CreateCompatibleDC(0)
  hBmpMask = CreateCompatibleBitmap(picBack.hDc, dx, dy)
  Call SelectObject(hMaskDC, hBmpMask)
  BitBlt hMaskDC, 0, 0, dx, dy, picBack.hDc, 0, 0, vbSrcCopy

11.Call SelectObject(hdcMono, hbmpOld)
  因已大功告成,所以將hdcMono上的繪圖區(qū)設(shè)回原先的區(qū)域(於Step 2中記錄),不過我個(gè)人沒有這個(gè)習(xí)慣,但沒有做有沒有影響系統(tǒng)資源,我是半路出家,實(shí)在不知。

12.Call DeleteDC(hdcMono)
  刪除記憶體 DC,這沒做就不好了。

13.Call DeleteObject(hbmpMono)
  刪除Bitmap,這沒做就不好了。

'以下在form 需二個(gè)PictureBox,一個(gè)Image Control, 一個(gè)Command Box
Private Sub Command1_Click()
Dim dx As Long, dy As Long

Call GetInvertMaskPic(Picture1, Image1, RGB(0, 0, 255))
'請(qǐng)確認(rèn)相對(duì)pen.bmp圖的背景顏色是什麼,本例中是藍(lán)色,故使用RGB(0,0,255)
Call GetMaskPic(Picture1, Image1, RGB(0, 0, 255))

dx = Me.ScaleX(Image1.Picture.Width, vbHimetric, vbPixels)
dy = Me.ScaleY(Image1.Picture.Height, vbHimetric, vbPixels)

'以下將image1的圖去除背景畫在Picture2之上
Set Picture1.Picture = Image1.Picture
BitBlt Picture2.hDc, 0, 0, dx, dy, hMaskDC, 0, 0, vbSrcAnd
BitBlt Picture1.hDc, 0, 0, dx, dy, hInvertMaskDC, 0, 0, vbSrcAnd
BitBlt Picture2.hDc, 0, 0, dx, dy, Picture1.hDc, 0, 0, vbSrcPaint

End Sub

Private Sub Form_Load()
Picture1.Visible = False
Picture1.AutoRedraw = True
'Picture1.Appearance = 0 '要事先設(shè)定
Picture1.BorderStyle = 0
Set Image1.Picture = LoadPicture("c:\pen.bmp") '請(qǐng)自行設(shè)定您的圖
Set Picture2.Picture = LoadPicture("c:\bkpic.bmp") '請(qǐng)?jiān)O(shè)定成自己的背景圖
End Sub


Private Sub Form_Unload(Cancel As Integer)
  Call DeleteDC(hMaskDC)
  Call DeleteObject(hBmpMask)
  Call DeleteDC(hInvertMaskDC)
  Call DeleteObject(hBmpInvertMask)

End Sub



'以下在.BAS

Declare Function CreateCompatibleBitmap Lib "GDI32" _
   (ByVal hDc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Declare Function CreateCompatibleDC Lib "GDI32" _
   (ByVal hDc As Long) As Long
Declare Function DeleteObject Lib "GDI32" _
   (ByVal hObject As Long) As Long
Declare Function SelectObject Lib "GDI32" _
   (ByVal hDc As Long, ByVal hObject As Long) As Long
Declare Function DeleteDC Lib "GDI32" _
   (ByVal hDc As Long) As Long
Declare Function BitBlt Lib "GDI32" _
   (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
Declare Function SetBkColor Lib "GDI32" _
   (ByVal hDc As Long, ByVal crColor As Long) As Long

Public hMaskDC As Long, hBmpMask As Long
Public hInvertMaskDC As Long, hBmpInvertMask As Long

'取得 hMaskDC 的自訂函數(shù),該hMaskDC內(nèi)的圖像是souImg圖之背景為白色
'             而souImg的前景圖是黑色
'PicBack 叁數(shù): 用來制作 Mask 圖的圖片盒
'souImg 叁數(shù): 擺放原圖的影像之物件,可以是 image/picturebox
'TColor 叁數(shù): 欲去除的顏色,即souImg的背景色
Public Sub GetMaskPic(picBack As PictureBox, _
    souImg As Control, ByVal TColor As Long)
Dim hdcMono, hbmpMono, hbmpOld
Dim ColorBack As Long
Dim dx As Long, dy As Long

  With picBack
    '取得該圖的大小, by Pixels
    dx = .ScaleX(souImg.Picture.Width, vbHimetric, vbPixels)
    dy = .ScaleY(souImg.Picture.Height, vbHimetric, vbPixels)
    '設(shè)定pictureBox的大小與Source Image的大小相同
    .Width = souImg.Width
    .Height = souImg.Height
    Set .Picture = souImg.Picture
  End With
  
  hdcMono = CreateCompatibleDC(0)
  hbmpMono = CreateCompatibleBitmap(hdcMono, dx, dy)
  hbmpOld = SelectObject(hdcMono, hbmpMono)
  
  picBack.AutoRedraw = True
  picBack.BackColor = RGB(255, 255, 255)
  
  ColorBack = SetBkColor(picBack.hDc, TColor)
  BitBlt hdcMono, 0, 0, dx, dy, picBack.hDc, 0, 0, vbSrcCopy
  Call SetBkColor(picBack.hDc, ColorBack)
  BitBlt picBack.hDc, 0, 0, dx, dy, hdcMono, 0, 0, vbSrcCopy
  
  hMaskDC = CreateCompatibleDC(0)
  hBmpMask = CreateCompatibleBitmap(picBack.hDc, dx, dy)
  Call SelectObject(hMaskDC, hBmpMask)
  BitBlt hMaskDC, 0, 0, dx, dy, picBack.hDc, 0, 0, vbSrcCopy
 
  Call SelectObject(hdcMono, hbmpOld)
  Call DeleteDC(hdcMono)
  Call DeleteObject(hbmpMono)
  
End Sub

'取得 hInvertMaskDC 的自訂函數(shù),該hMaskDC內(nèi)的圖像是souImg圖之背景為白色
'             而souImg的前景圖是黑色
'PicBack 叁數(shù): 用來制作 Mask 圖的圖片盒
'souImg 叁數(shù): 擺放原圖的影像之物件,可以是 image/picturebox
'TColor 叁數(shù): 欲去除的顏色,即souImg的背景色
Public Sub GetInvertMaskPic(picBack As PictureBox, _
    souImg As Control, ByVal TColor As Long)
Dim hdcMono, hbmpMono, hbmpOld
Dim ColorBack As Long
Dim dx As Single, dy As Single

  With picBack
    dx = .ScaleX(souImg.Picture.Width, vbHimetric, vbPixels)
    dy = .ScaleY(souImg.Picture.Height, vbHimetric, vbPixels)
    '設(shè)定pictureBox的大小與Source Image的大小相同
    .Width = souImg.Width
    .Height = souImg.Height
    Set .Picture = souImg.Picture
  End With
  
  hdcMono = CreateCompatibleDC(0)
  hbmpMono = CreateCompatibleBitmap(hdcMono, dx, dy)
  hbmpOld = SelectObject(hdcMono, hbmpMono)
  
  picBack.AutoRedraw = True
  picBack.BackColor = RGB(255, 255, 255)
  
  ColorBack = SetBkColor(picBack.hDc, TColor)
  BitBlt hdcMono, 0, 0, dx, dy, picBack.hDc, 0, 0, vbSrcCopy
  Call SetBkColor(picBack.hDc, ColorBack)
  BitBlt picBack.hDc, 0, 0, dx, dy, hdcMono, 0, 0, vbNotSrcCopy
    
  hInvertMaskDC = CreateCompatibleDC(0)
  hBmpInvertMask = CreateCompatibleBitmap(picBack.hDc, dx, dy)
  Call SelectObject(hInvertMaskDC, hBmpInvertMask)
  BitBlt hInvertMaskDC, 0, 0, dx, dy, picBack.hDc, 0, 0, vbSrcCopy

  Call SelectObject(hdcMono, hbmpOld)
  Call DeleteDC(hdcMono)
  Call DeleteObject(hbmpMono)
  
End Sub

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        欧美日韩亚洲国产综合| 亚洲三级久久久| 中文字幕欧美国产| 成人午夜激情影院| 国产人久久人人人人爽| 一本色道久久综合亚洲aⅴ蜜桃| 中文字幕日韩欧美一区二区三区| 99精品视频中文字幕| 亚洲精品国产a| 欧美电影一区二区| 国产一区二区三区最好精华液| 欧美国产精品一区| 欧美日韩一区国产| 粉嫩av一区二区三区在线播放| 一区二区高清在线| 久久精品视频在线看| 欧美中文字幕一二三区视频| 韩国成人在线视频| 亚洲激情成人在线| 久久久久99精品一区| 日本韩国精品一区二区在线观看| 日本aⅴ亚洲精品中文乱码| 国产精品欧美久久久久无广告| 欧美三级韩国三级日本一级| 国产激情精品久久久第一区二区 | 精品亚洲aⅴ乱码一区二区三区| 久久久99精品免费观看| 欧美手机在线视频| 成人av午夜电影| 老司机精品视频在线| 中文字幕一区二区5566日韩| 日韩欧美精品在线| 欧美日韩免费视频| 色婷婷av一区二区三区大白胸| 久久成人综合网| 一二三区精品视频| 中文字幕制服丝袜成人av| 欧美变态凌虐bdsm| 欧美日本乱大交xxxxx| 91麻豆国产自产在线观看| 国产成人在线影院| 国内精品伊人久久久久av一坑| 婷婷综合另类小说色区| 亚洲成人www| 亚洲高清视频在线| 亚洲网友自拍偷拍| 午夜精品免费在线| 天天av天天翘天天综合网色鬼国产| 一区av在线播放| 亚洲一二三区在线观看| 亚洲一区二区不卡免费| 亚洲一区二区在线视频| 亚洲成人在线免费| 午夜日韩在线观看| 视频一区二区国产| 久久精品噜噜噜成人av农村| 青青草伊人久久| 久久99精品久久久久久动态图| 肉色丝袜一区二区| 蜜桃久久久久久久| 国产一区二区三区不卡在线观看 | 欧洲一区二区三区免费视频| gogogo免费视频观看亚洲一| 成人国产一区二区三区精品| 成人综合在线视频| 91啪亚洲精品| 欧美三级电影在线看| 666欧美在线视频| 精品少妇一区二区三区日产乱码 | 亚洲男人天堂av| 亚洲午夜精品在线| 久久99热99| 99精品视频一区| 欧美日本免费一区二区三区| 日韩精品专区在线影院重磅| 国产午夜一区二区三区| 亚洲丝袜自拍清纯另类| 午夜视频一区二区三区| 国产一区二区0| gogo大胆日本视频一区| 欧美日韩亚洲综合一区二区三区| 欧美一级二级在线观看| 国产片一区二区| 亚洲国产成人va在线观看天堂| 日韩在线观看一区二区| 国产成人精品影视| 欧美三级视频在线观看| 久久综合色鬼综合色| 一区二区三区国产豹纹内裤在线| 美女看a上一区| 色哟哟国产精品| 久久综合色综合88| 亚洲国产精品自拍| 国产.欧美.日韩| 制服丝袜中文字幕一区| 中文字幕av资源一区| 免费人成精品欧美精品| 91亚洲精品久久久蜜桃| 久久综合九色综合97婷婷女人| 亚洲精品一二三区| 国产白丝精品91爽爽久久| 在线成人av网站| 亚洲免费观看高清完整版在线| 国产综合成人久久大片91| 欧美性大战久久久久久久| 国产精品视频看| 黑人巨大精品欧美黑白配亚洲| 欧美视频三区在线播放| 亚洲蜜臀av乱码久久精品| 国产98色在线|日韩| 日韩你懂的在线观看| 三级欧美韩日大片在线看| 91九色最新地址| 亚洲日本va午夜在线影院| 岛国av在线一区| 国产清纯美女被跳蛋高潮一区二区久久w | 国产亚洲一区二区在线观看| 青椒成人免费视频| 欧美老肥妇做.爰bbww| 亚洲福利视频导航| 91国偷自产一区二区三区观看| 国产精品美女久久久久aⅴ| 激情国产一区二区| 精品女同一区二区| 六月丁香综合在线视频| 欧美一区二区日韩一区二区| 丝袜亚洲另类丝袜在线| 欧美日韩一区在线观看| 一区二区免费视频| 欧美三级三级三级爽爽爽| 亚洲一区成人在线| 欧美性猛片xxxx免费看久爱| 亚洲综合久久久久| 欧美日韩高清在线| 日韩中文字幕亚洲一区二区va在线 | 亚洲高清三级视频| 欧美日韩成人激情| 蜜桃精品视频在线| 亚洲精品一区二区三区蜜桃下载| 日本亚洲视频在线| 久久婷婷国产综合精品青草| 国产电影一区在线| 中文字幕字幕中文在线中不卡视频| 成人激情免费网站| 亚洲一区二区三区精品在线| 欧美日韩精品欧美日韩精品一综合 | 精品国产人成亚洲区| 韩国女主播成人在线观看| 国产精品网站一区| 日本道精品一区二区三区| 亚洲电影一区二区| 26uuu国产一区二区三区| 成人精品视频网站| 亚洲va在线va天堂| 久久久精品免费观看| 99精品热视频| 蜜乳av一区二区| 亚洲少妇30p| 欧美主播一区二区三区美女| 日本不卡1234视频| 亚洲欧美自拍偷拍| 日韩欧美亚洲另类制服综合在线| 国产91丝袜在线播放| 一区二区三区国产精华| 26uuu成人网一区二区三区| 色综合激情久久| 精品一区二区三区欧美| 亚洲欧美视频一区| 国产亚洲1区2区3区| 制服.丝袜.亚洲.中文.综合| 成人午夜电影小说| 青青草视频一区| 亚洲自拍偷拍综合| 亚洲国产精品激情在线观看| 69堂国产成人免费视频| 风间由美性色一区二区三区| 日韩高清不卡一区二区| 日韩毛片精品高清免费| 26uuu久久综合| 日韩丝袜美女视频| 欧美三区在线视频| 91女神在线视频| 国产福利91精品一区| 免费不卡在线观看| 亚洲国产wwwccc36天堂| 亚洲欧美激情在线| 国产精品五月天| 久久久久久夜精品精品免费| 91麻豆精品国产综合久久久久久| 色噜噜狠狠色综合中国| 成人黄色在线看| 成a人片亚洲日本久久| 国产成人自拍高清视频在线免费播放| 日日摸夜夜添夜夜添亚洲女人| 亚洲日本一区二区三区| 日韩理论片中文av| 亚洲天堂精品视频| 亚洲日韩欧美一区二区在线| 国产精品网站在线播放| 国产精品色一区二区三区|