您的当前位置:我要购书网>在线阅读>Visual Basic

透明位图

来源:互联网  作者:  发布:我要购物网收集整理  发布时间:2006-8-31 人气:267

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

相关文章
· 透明位图
热点文章
%>
· creating user controls
· 提高fastreplace速度 (fstrrep.pas)
· asc ii 完整码表及简介
· 自动生成拼音(汉字反查到拼音)
· sql2000无法安装的解决办法
· 浏览器集成教学 自定义浏览器
· vc++技术内幕(第四版)笔记(第7章)
· mysql5.0中文乱码解决方案
· sql server日期计算
· vc下利用ado连接access数据库
 淘宝旺旺:我要购书网上书店『图书目录
本购书中心地址: 杭州市延安路111号清波商厦南楼D座(总部) 上海市闸北区老沪太路网上购书中心(沪部),  邮编:310002
电子邮件:books@51goushu.com  经营许可证编号:沪ICP备06038574号
版权所有 2003-2008 © All Rights Reserved .购书网