如何将2个stdpicture合并成一个stdpicture
怎么将2个stdpicture合并成一个stdpicture?
有2个图片 tmp.bmp 和 mask.bmp 用paintpicture等可以将他们装进一个picturebox中,并且呈现出透明效果。见下面的代码。
现在要求
1、不用picturebox控件(因为从它哪里再得到图片是不透明的),能不能用stdpicture本身来操作?
2、如果用stdpicture.render,那么怎么得到stdpicture的hdc?
3、是否还有其它非专业的技术方法可以将一个图片和它的mask图片合成一个透明的图片,关键是我要得到这个透明图片。
还望各位大侠指点一二,提前谢谢了......
------解决方案--------------------
普通的方法是无法透明化的,可以使用gdi+
------解决方案--------------------
用AlphaBlend函数吧,不过还是要用图片框的,因为需要两个DC,要是非得不使用图片框,那就用API创建两个内存DC应该也行,但是不如用图片框简单.
------解决方案--------------------
我知道你为什么坚持用picturebox的paintpicture方法了,因为它的第一个参数就是stdpicture。这个方法一般来说是不行的,跟光栅运算API没什么区别,还得在picturebox上面动脑筋。这里倒是有一个,可以使picturebox透明,但速度有点慢,用数组也许要快一点:http://bbs.****.net/topics/320158998
------解决方案--------------------
楼主加我QQ吧,我给你一些代码。
有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
------解决方案--------------------
我知道你为什么坚持用picturebox的paintpicture方法了,因为它的第一个参数就是stdpicture。这个方法一般来说是不行的,跟光栅运算API没什么区别,还得在picturebox上面动脑筋。这里倒是有一个,可以使picturebox透明,但速度有点慢,用数组也许要快一点:http://bbs.****.net/topics/320158998
------解决方案--------------------
楼主加我QQ吧,我给你一些代码。