首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

如何将2个stdpicture合并成一个stdpicture

2013-03-06 
怎么将2个stdpicture合并成一个stdpicture?有2个图片tmp.bmp和 mask.bmp用paintpicture等可以将他们装进一

怎么将2个stdpicture合并成一个stdpicture?
有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图片合成一个透明的图片,关键是我要得到这个透明图片。

还望各位大侠指点一二,提前谢谢了......

[解决办法]
普通的方法是无法透明化的,可以使用gdi+
[解决办法]
用AlphaBlend函数吧,不过还是要用图片框的,因为需要两个DC,要是非得不使用图片框,那就用API创建两个内存DC应该也行,但是不如用图片框简单.

Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
  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

[解决办法]
引用:
引用:
现在已经不知道楼主主要是在问什么的问题了。
其实很简单啊,有2个stdpicture(互补图片),使用picturebox的paintpicture方法可以在picturebox中展现出透明效果,我现在想要要那个透明的图片(stdpicture),而且能在web中显示。

(1)如果 set stdpicture=picturebox.imag……

我知道你为什么坚持用picturebox的paintpicture方法了,因为它的第一个参数就是stdpicture。这个方法一般来说是不行的,跟光栅运算API没什么区别,还得在picturebox上面动脑筋。这里倒是有一个,可以使picturebox透明,但速度有点慢,用数组也许要快一点:http://bbs.csdn.net/topics/320158998
[解决办法]
楼主加我QQ吧,我给你一些代码。

热点排行