实用ALPHABLEND这个API,WIN98下也有,不过似乎不起作用,WIN2000下绝对可以用。 相关API:RtlMoveMemory 定义: 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 Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)Private Type BLENDFUNCTION BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte End Type过程: Private Sub AlBnd() Dim BF As BLENDFUNCTION Dim lBF As Long Dim X As Long Dim Y As Long BF.SourceConstantAlpha = 80 '输出的透明度 RtlMoveMemory lBF, BF, 4 With Picture1 AlphaBlend .hdc, 0, 0, .Width, .Height, Picture2.hdc, 0, 0, .Width, .Height, lBF End With End Sub '这个过程将Picture2上的图片以80/255的透明度输出到Picture1上. '如果两个Picture控件的大小一致,速度非常快; '如果大小不同,则系统会自动缩放,但是速度会慢一些。
相关API:RtlMoveMemory
定义:
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 Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type过程:
Private Sub AlBnd()
Dim BF As BLENDFUNCTION
Dim lBF As Long
Dim X As Long
Dim Y As Long
BF.SourceConstantAlpha = 80 '输出的透明度
RtlMoveMemory lBF, BF, 4
With Picture1
AlphaBlend .hdc, 0, 0, .Width, .Height, Picture2.hdc, 0, 0, .Width, .Height, lBF
End With
End Sub
'这个过程将Picture2上的图片以80/255的透明度输出到Picture1上.
'如果两个Picture控件的大小一致,速度非常快;
'如果大小不同,则系统会自动缩放,但是速度会慢一些。
用调色板吧, 假如一个颜色是 RGB(255,255,255), 你可以将它从RGB(0,0,0) 慢慢画到RGB(255,255,255)
*****************************
绝对不懂,给讲讲如何实现