转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
透明位图         ★★★★

透明位图

作者:闵涛 文章来源:闵涛的学习笔记 点击数:808 更新时间:2009/4/23 16:37:47

 

''''以下在form 需二个PictureBox,一个Image Control, 一个Command Box

vate Sub Command1_Click()
Dim dx As Long, dy As Long

Call GetInvertMaskPic(Picture1, Image1, RGB(255, 255, 255))
''''注释:请确认相对pen.bmp图的背景颜色是什麽,本例中是白色,故使用RGB(255,255,255)
Call GetMaskPic(Picture1, Image1, RGB(255, 255, 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 注释:要事先设定
Picture1.BorderStyle = 0
Set Image1.Picture = LoadPicture("c:\1.wmf") ''''注释:请自行设定您的图
''''Set Picture2.Picture = LoadPicture("c:\2.bmp")   ''''注释:请设定成自己的背景图
Picture2.Height = Image1.Height
Picture2.Width = Image1.Width
Picture2.Picture = Image1.Picture
End Sub

''''''''module1---------------------------

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 的自订函数,该hMaskDC内的图像是souImg图之背景为白色
''''注释:              而souImg的前景图是黑色
''''注释:PicBack 叁数: 用来制作 Mask 图的图片盒
''''注释:souImg 叁数: 摆放原图的影像之物件,可以是 image/picturebox
''''注释:TColor 叁数: 欲去除的颜色,即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)
''''注释:     设定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 的自订函数,该hMaskDC内的图像是souImg图之背景为白色
''''注释:              而souImg的前景图是黑色
''''注释:PicBack 叁数: 用来制作 Mask 图的图片盒
''''注释:souImg 叁数: 摆放原图的影像之物件,可以是 image/picturebox
''''注释:TColor 叁数: 欲去除的颜色,即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)
''''注释:     设定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

 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台