注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
透明防火墙架设的完全攻略(brid
打开Vista 5342 Glass半透明效果
如何在Linux中设置透明代理
随心订制linux透明防火墙
为VC++应用程序对话框添加透明位
制作半透明窗体
用GDI+实现半透明渐变的特效窗口
Fireworks4 制作透明字
融会CorelDRAW9之四——透明图案
融会CorelDRAW9之五——透明、透
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> VB >> 文章正文
透明位图
作者:eorr  来源:csdn  点击:  更新:2006-12-19
简介:
 

 

'以下在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

 






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务