国产午夜成人免费看片无遮挡_日本免费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>

        日韩一级二级三级精品视频| 一本色道久久综合亚洲91| 国产精品1024| 日韩精品一区二区三区蜜臀| 久久91精品久久久久久秒播| 精品久久一区二区| 国产成人精品aa毛片| 国产精品免费视频一区| 91搞黄在线观看| 美女脱光内衣内裤视频久久影院| 国产欧美精品日韩区二区麻豆天美| 国产成人精品综合在线观看 | 99久久国产综合精品色伊| 亚洲同性同志一二三专区| 欧美色精品在线视频| 久久国产精品免费| 亚洲欧美乱综合| 精品国产乱码久久久久久闺蜜 | 欧美va亚洲va国产综合| 国产一区二区免费在线| 亚洲欧洲三级电影| 337p亚洲精品色噜噜噜| 成人手机电影网| 奇米888四色在线精品| 日韩毛片视频在线看| 精品国产91洋老外米糕| 欧美中文一区二区三区| 成人毛片在线观看| 蜜臀av性久久久久蜜臀aⅴ| 综合在线观看色| 久久精品亚洲国产奇米99| 欧美亚州韩日在线看免费版国语版| 国产精品一级二级三级| 亚洲成a人v欧美综合天堂| 欧美激情一区在线观看| 91精品国产一区二区| 日本电影亚洲天堂一区| 国产白丝网站精品污在线入口| 亚洲图片欧美一区| 国产精品美女久久久久aⅴ| 精品久久久久久久久久久久久久久久久 | 中文字幕av一区二区三区免费看| 欧美日韩国产大片| 成人精品在线视频观看| 免费久久精品视频| 水野朝阳av一区二区三区| 亚洲美女屁股眼交3| 日本一区二区电影| 欧美激情综合在线| 久久精品人人做人人综合| 日韩欧美第一区| 91精品黄色片免费大全| 欧美日韩精品一区二区在线播放| 91片黄在线观看| 日本丰满少妇一区二区三区| 色婷婷香蕉在线一区二区| 91污在线观看| 在线观看区一区二| 欧美日本一道本| 91精品福利在线一区二区三区 | 免费成人在线视频观看| 麻豆精品视频在线观看| 极品少妇一区二区三区精品视频| 国产在线视频不卡二| 国产精品亚洲一区二区三区妖精| 国产精品一卡二卡在线观看| 成人在线视频一区二区| 91在线播放网址| 欧美色倩网站大全免费| 91.成人天堂一区| 欧美一区二区在线视频| 精品久久久久av影院| 国产亚洲精品aa| ...xxx性欧美| 日本vs亚洲vs韩国一区三区| 免费av成人在线| 成人综合婷婷国产精品久久免费| 91视频在线观看| 正在播放一区二区| 国产精品三级电影| 亚洲国产一区二区三区青草影视| 奇米精品一区二区三区在线观看一| 久久精品噜噜噜成人av农村| 国产宾馆实践打屁股91| 欧美影院精品一区| 欧美不卡激情三级在线观看| 亚洲视频1区2区| 美女爽到高潮91| 91性感美女视频| 欧美电影免费观看高清完整版在| 国产精品成人免费精品自在线观看| 亚洲国产欧美日韩另类综合 | 亚洲国产精品久久久男人的天堂| 奇米精品一区二区三区四区 | 久久综合九色综合欧美亚洲| 亚洲色图丝袜美腿| 美女爽到高潮91| 欧美专区在线观看一区| 国产日韩精品一区二区三区| 日韩精品一级二级| 色婷婷综合久久久中文一区二区| 欧美性猛交xxxx黑人交| 国产午夜精品一区二区| 夜夜爽夜夜爽精品视频| 在线视频你懂得一区| 欧美一区二区三区人| 欧美激情在线一区二区| 日本成人在线视频网站| 91首页免费视频| 国产日韩欧美一区二区三区乱码| 视频一区二区欧美| 色综合久久六月婷婷中文字幕| 久久亚洲精精品中文字幕早川悠里 | 成人avav影音| 337p粉嫩大胆噜噜噜噜噜91av | 午夜成人免费视频| 91小视频免费观看| 国产欧美日韩精品一区| 美腿丝袜亚洲一区| 欧美美女喷水视频| 一区二区三区日韩精品| 91丨porny丨蝌蚪视频| 国产精品妹子av| 成人午夜电影小说| 欧美国产一区二区在线观看 | 欧美一区二区三区四区高清| 亚洲一区在线播放| 91丨九色丨黑人外教| 亚洲视频一区二区在线观看| zzijzzij亚洲日本少妇熟睡| 国产精品你懂的| 不卡的av在线播放| 国产精品色一区二区三区| 高清视频一区二区| 中文字幕不卡一区| 色综合天天综合色综合av | 欧洲精品视频在线观看| 亚洲精品国产a| 在线观看成人小视频| 亚洲成av人**亚洲成av**| 91激情在线视频| 亚洲综合成人在线视频| 欧美精品在线观看一区二区| 日av在线不卡| www精品美女久久久tv| 成人在线综合网站| 亚洲一区二区三区中文字幕 | 日韩精品一区二区三区在线播放| 日本网站在线观看一区二区三区| 4hu四虎永久在线影院成人| 精品一二三四区| 1区2区3区国产精品| 欧美在线你懂的| 日本成人在线视频网站| 337p粉嫩大胆噜噜噜噜噜91av| 成人自拍视频在线观看| 亚洲二区在线视频| 精品国产免费一区二区三区香蕉 | 日韩福利视频导航| 久久久久久久久一| eeuss鲁片一区二区三区| 亚洲高清视频的网址| 欧美mv日韩mv亚洲| 99精品欧美一区二区三区综合在线| 一区二区高清免费观看影视大全| 精品少妇一区二区三区在线播放| 成人免费视频一区| 首页亚洲欧美制服丝腿| 国产网站一区二区| 91豆麻精品91久久久久久| 韩国精品一区二区| 亚洲一区二区高清| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩午夜在线视频| 国产成人小视频| 免费在线观看不卡| 亚洲激情自拍偷拍| 欧美国产亚洲另类动漫| 91精品国产色综合久久不卡电影 | 亚洲一卡二卡三卡四卡无卡久久| 亚洲精品在线观看网站| 欧美午夜精品久久久久久孕妇| 国产美女主播视频一区| 日韩国产欧美在线播放| 亚洲精品国产高清久久伦理二区| 精品成人一区二区三区四区| 色呦呦一区二区三区| 国产精品一区在线观看乱码 | 日韩视频一区二区在线观看| 成人a区在线观看| 麻豆精品视频在线观看| 亚洲综合丝袜美腿| 中文字幕一区二区三区四区不卡| 精品国产91亚洲一区二区三区婷婷| 欧美三日本三级三级在线播放| 播五月开心婷婷综合| 国产一本一道久久香蕉| 久草在线在线精品观看| 免费看欧美美女黄的网站| 天天影视网天天综合色在线播放|