有2个图片 tmp.bmp 和 mask.bmp 用paintpicture等可以将他们装进一个picturebox中,并且呈现出透明效果。见下面的代码。Sub test()
Dim sPic As StdPicture, sMask As StdPicture
''加载2个图片,可以从文件或从ClipBoard获取。这2个图片“互补”组合在一起可以达到“透明”效果
Set sPic = LoadPicture("c:\tmp.bmp")
Set sMask = LoadPicture("c:\mask.bmp")
''Pic1为一个picturebox控件。用下面的方法可以显示透明效果
pic1.PaintPicture sMask, 0, 0, pic1.Width, pic1.Height, 0, 0, pic1.Width, pic1.Height, vbSrcAnd ' &H8800C6
pic1.PaintPicture sPic, 0, 0, pic1.Width, pic1.Height, 0, 0, pic1.Width, pic1.Height, vbSrcPaint ' &HEE0086
''sPic.Render hdc, 0, 0, 0, 0, 0, 0, 0, 0, 0&'''怎么得到StdPicture的hdc?
Dim oPic As StdPicture
Set oPic = pic1.Image ''这里得到的oPic是不透明的!!!
End Sub现在要求
1、不用picturebox控件(因为从它哪里再得到图片是不透明的),能不能用stdpicture本身来操作?
2、如果用stdpicture.render,那么怎么得到stdpicture的hdc?
3、是否还有其它非专业的技术方法可以将一个图片和它的mask图片合成一个透明的图片,关键是我要得到这个透明图片。还望各位大侠指点一二,提前谢谢了......
Dim sPic As StdPicture, sMask As StdPicture
''加载2个图片,可以从文件或从ClipBoard获取。这2个图片“互补”组合在一起可以达到“透明”效果
Set sPic = LoadPicture("c:\tmp.bmp")
Set sMask = LoadPicture("c:\mask.bmp")
''Pic1为一个picturebox控件。用下面的方法可以显示透明效果
pic1.PaintPicture sMask, 0, 0, pic1.Width, pic1.Height, 0, 0, pic1.Width, pic1.Height, vbSrcAnd ' &H8800C6
pic1.PaintPicture sPic, 0, 0, pic1.Width, pic1.Height, 0, 0, pic1.Width, pic1.Height, vbSrcPaint ' &HEE0086
''sPic.Render hdc, 0, 0, 0, 0, 0, 0, 0, 0, 0&'''怎么得到StdPicture的hdc?
Dim oPic As StdPicture
Set oPic = pic1.Image ''这里得到的oPic是不透明的!!!
End Sub现在要求
1、不用picturebox控件(因为从它哪里再得到图片是不透明的),能不能用stdpicture本身来操作?
2、如果用stdpicture.render,那么怎么得到stdpicture的hdc?
3、是否还有其它非专业的技术方法可以将一个图片和它的mask图片合成一个透明的图片,关键是我要得到这个透明图片。还望各位大侠指点一二,提前谢谢了......
Private Sub Form_Load()
Picture1.AutoSize = True
Picture1.AutoRedraw = True
Picture2.AutoSize = True
Picture2.AutoRedraw = True
End Sub
Private Sub Command1_Click()
Picture1.Picture = LoadPicture("C:\1.bmp")
Picture2.Picture = LoadPicture("C:\2.bmp")
AlphaBlend Picture1.hdc, 10, 10, 100, 100, Picture2.hdc, 20, 20, 100, 100, &H10000 * 128
Picture1.Refresh
End Sub
找到了一个office的http://support.microsoft.com/kb/288771/zh-tw
根据微软提供的代码,做了个试验,结果不成功啊!!
这是我用画图程序画的图:结果吧,那个洋红的背景并没有被去掉。哪位大侠知道是怎么回事??提示一下,不胜感激。测试代码如下:
1、vb中的---只需要一个commandPrivate Sub Command1_Click()
Dim oPic As StdPicture
Set oPic = LoadPicture(App.Path & "\测试.bmp") '''透明区域的颜色为白色
CopyBitmapAsButtonFace oPic, &HFF00FF''将做好的图片复制到内存中
''这个过程执行完成后再转到excel中执行下面的代码
End Sub
'''VB模块中的代码,用微软提供的,这里不再粘贴,以免浪费....请见谅2、excel中的代码Sub test()
Dim btn As CommandBarButton
'''需要提前在excel里建立一个名称为 mybar 的自定义工具条,并拖入一个按钮
Set btn = CommandBars("mybar").Controls(1)
btn.PasteFace''粘贴内存中的图片
End Sub
转换后的图片不能在web中显示(估计是调色板的问题)。这一点代码中也有说明,代码中还给了一个地址(http://vbaccelerator.com/codelib/gfx/octree.htm)现在打不开了。现在正在找能转换成在web上显示的相关说明。不过还没有什么线索,大侠如果有什么建议,我很期待您的建议........
怎么就没有一个VB大佬写一个 可以生成能在web中使用的GIF89a格式的透明图片呢?
像我等菜鸟 花点钱买也可以啊?难道是 “版权”在作怪??!!
我的问题其实是在逐步升级的,如果第(3)步还不能成功,就放弃不再想这个问题了。目前虽然不能做到背景真正透明,但是任意修改背景色还是很容易做到的。让大家费心了........
我重新说一下问题:
有一组(2张)图片:home.bmp、homemask.bmp要得到的效果如下(Ulead Gif Animator做的效果不太好):home1.gif(我要stdpicture对象或者是复制到剪贴板中)
补充说明:以前在word里做的自定义工具条,想用一些自定义按钮图片,现在想将那些图片用在web显示出来。所以便有此要求。(在5楼提到微软的一个例子,但我做实验的时候没成功,笨死了。)
Sub test()
Dim btn As CommandBarButton
Set btn = CommandBars("mybar").Controls(1)
''得到一组互补的图片
'' Dim std As StdPicture
'' Set std = btn.Picture
'' SavePicture std, "d:\home.bmp"
'' Set std = btn.Mask
'' SavePicture std, "d:\homemask.bmp"
''设置按钮的自定义图片
btn.Picture = LoadPicture("d:\home.bmp")
btn.Mask = LoadPicture("d:\homemask.bmp")
End Sub
Sub CombinStd()
''根据一组图片得到透明stdpicture或者是复制到剪贴板
Dim Std1 As StdPicture, Std2 As StdPicture
Set Std1 = LoadPicture("d:\home.bmp")
Set Std2 = LoadPicture("d:\homemask.bmp")
Dim Std3 As StdPicture
''现在怎么才能由std1和std2“合并”得到一个透明std3(或者复制到剪贴板也可以)
''如果借用picturebox,使用panitpicture方法可以在picturebox中展现出透明的效果
''现在的目的是要在web中显示那个图片,可不能有背景色。
End Sub