怎样用VB把一张图片透明的放到Picture里,在线等

怎样用VB把一张图片透明的放到Picture里,在线等,第1张

Public Function TranBlt(DestHdc As Long, X As Long, Y As Long, W As Long, H As Long, srcHdcOrBmp As Long, Optional srcX As Integer, Optional srcY As Integer, Optional srcW As Long, Optional srcH As Long, Optional tc As Long = -1, Optional IsBmp As Boolean) As Long
'srcHdcOrBmp参数 传入的可以是hdc也可以是Bmp对象的Handle,
'IsBmp参数 为真时srcHdcOrBmp代表Bmp对象的Handle,为假时代表hdc
'返回值 成功时返回透明色,不成功时返回-1
Dim tHdc(3) As MemHdc
Dim J As Long, oc As Long, I As Long, Bm As BITMAP, cc As Long, NewDc As Long
Dim sw As Long, sh As Long, sBmp As Long, sHdc As Long, obm As Long, NewX As Long, NewY As Long
If DestHdc = 0 Or srcHdcOrBmp = 0 Or W = 1 And H = 1 Then GoTo fail
If IsBmp Then '若传入的是Bmp句柄,需为其创建一个临时DC
sBmp = srcHdcOrBmp
tHdc(3) = NewMyHdc(DestHdc, 0, 0, srcHdcOrBmp)
sHdc = tHdc(3)hdc
Else
sHdc = srcHdcOrBmp
If srcW = 0 Then sBmp = GetCurrentObject(sHdc, 7)
End If
If sHdc = 0 Or sBmp = 0 Then GoTo fail
If srcW = 0 Then '若没有提供源图大小,需取得整个源图大小
GetObj sBmp, Len(Bm), Bm
sw = BmbmWidth - srcX
sh = BmbmHeight - srcY
Else
sw = srcW
sh = srcH
End If
If sw < 1 Or sh < 1 Then GoTo fail
If tc = -1 Then
cc = GetPixel(sHdc, srcX, srcY) '将左上角第一个像素作为源图背景色,用于透明
Else
cc = tc
End If
If W <> sw Or H <> sh Then
tHdc(2) = NewMyHdc(DestHdc, W, H)
StretchBlt tHdc(2)hdc, 0, 0, W, H, sHdc, srcX, srcY, sw, sh, vbSrcCopy
'先将源图缩放,下面步骤就一样了。
NewDc = tHdc(2)hdc
Else
NewDc = sHdc
NewX = srcX
NewY = srcY
End If
BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert
'将源图先反色(XOR)绘入目标图,若源图背景为黑色,此步可省

'下面是制作Mask图的方法
I = CreateBitmap(W, H, 1, 1, ByVal 0&) '建立单色位图
tHdc(0) = NewMyHdc(DestHdc, 0, 0, I) '为单色图建立新DC,并选入
tHdc(1) = NewMyHdc(DestHdc, W, H) '另建一个彩色图及DC,用于存放Mask图
oc = SetBkColor(NewDc, cc) '将源图背景色改为透明色
BitBlt tHdc(0)hdc, 0, 0, W, H, NewDc, NewX, NewY, vbSrcCopy
'先将源图绘入单色DC,由此产生只有正反的Mask图,背景色(透明色)为黑,其它为白
SetBkColor NewDc, oc '恢复源图背景色,不是必须的,但这是个好习惯。
BitBlt tHdc(1)hdc, 0, 0, W, H, tHdc(0)hdc, 0, 0, vbSrcCopy
'单色DC必须复制进彩色DC才能进行后面的的AND运算
'Mask图完成,并已放入彩色DC

BitBlt DestHdc, X, Y, W, H, tHdc(1)hdc, 0, 0, vbSrcAnd '标准透明绘图:选将Mask图用And运算绘入,
BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert '再将源图以反色(XOR)绘入一次

DelMyHdc tHdc(0)
DelMyHdc tHdc(1)

If tHdc(2)hdc <> 0 Then DelMyHdc tHdc(2)
If tHdc(3)hdc <> 0 Then DelMyHdc tHdc(3)
TranBlt = cc
Exit Function
fail:
If tHdc(3)hdc <> 0 Then DelMyHdc tHdc(3)
TranBlt = -1
End Function
Private Function NewMyHdc(dHdc As Long, W As Long, H As Long, Optional Bm As Long) As MemHdc
With NewMyHdc
hdc = CreateCompatibleDC(dHdc)
If Bm = 0 Then
Bmp = CreateCompatibleBitmap(dHdc, W, H)
Else
Bmp = Bm
End If
obm = SelectObject(hdc, Bmp)
End With
End Function
Private Function DelMyHdc(MyHdc As MemHdc, Optional nobmp As Boolean) As MemHdc
With MyHdc
If hdc <> 0 And obm <> 0 Then SelectObject hdc, obm
If nobmp = False And Bmp <> 0 Then DeleteObject Bmp
If hdc <> 0 Then DeleteDC hdc
End With
End Function
把这个函数放在一个BAS里,然后在窗体里
TranBlt pichdc, X,Y,W,H,PIC2PictureHandle, _
TX,TY,TW,TH, , True
就OK

1、使用华为方舟编译器只需要在手机上安装应用程序即可全速运行程序,从而带来效率上的极大提升。使用华为方舟编译器,可以提升系统 *** 作流畅度的24%,并且系统响应性能也能提升44%。
2、华为方舟编译器是华为公司为了提升Android系统的编译效率推出的一项系统及应用的编译和运行机制。
3、方舟编译器是基于GCC开发的交叉编译器套件,它包括了C、C++、Fortran的前端,也包括了这些语言的库(如libstdc++、libgcc等)。HCC运行在X86linux架构服务器上,生成的二进制运行在Aarch64架构服务器上。
4、2019年4月,在华为P30系列国内发布会上,华为首次宣布了该技术。8月31日,方舟编译器开源。

1打开控制面板 打印机和传真机
2文件 - 服务器属性
3创建新格式 在下面的格式描述里设置
希望帮到你
这个可以不知道了 在你购买的保修单上会有点
楼主你好
恭喜你解决问题了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13448619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-08
下一篇 2023-08-08

发表评论

登录后才能评论

评论列表(0条)

保存