|
2学分
本帖最后由 淡淡的邪 于 2019-4-27 23:16 编辑
- Option Explicit
- Private Type GUID
- Data1 As Long
- Data2 As Integer
- Data3 As Integer
- Data4(0 To 7) As Byte
- End Type
- Private Type PICTDESC
- Size As Long
- Type As Long
- hPic As LongPtr
- hPal As LongPtr
- End Type
- Private Type GdiplusStartupInput
- GdiplusVersion As Long
- DebugEventCallback As LongPtr
- SuppressBackgroundThread As Long
- SuppressExternalCodecs As Long
- End Type
- Private Declare PtrSafe Function GdiplusStartup Lib "GDIPlus" (token As LongPtr, _
- inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As LongPtr = 0) As LongPtr
- Private Declare PtrSafe Function GdipCreateBitmapFromFile Lib "GDIPlus" (ByVal filename As LongPtr, bitmap As LongPtr) As LongPtr
- Private Declare PtrSafe Function GdipCreateHBITMAPFromBitmap Lib "GDIPlus" (ByVal bitmap As LongPtr, _
- hbmReturn As LongPtr, ByVal background As Long) As LongPtr
- Private Declare PtrSafe Function GdipDisposeImage Lib "GDIPlus" (ByVal image As LongPtr) As LongPtr
- Private Declare PtrSafe Function GdiplusShutdown Lib "GDIPlus" (ByVal token As LongPtr) As LongPtr
- '原版为olepro32.dll
- Private Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" (PicDesc As PICTDESC, _
- RefIID As GUID, ByVal fPictureOwnsHandle As LongPtr, IPic As IPicture) As LongPtr
- Public Function LoadImage(ByVal strFName As String) As IPicture
- Dim uGdiInput As GdiplusStartupInput
- Dim hGdiPlus As LongPtr
- Dim hGdiImage As LongPtr
- Dim hBitmap As LongPtr
- uGdiInput.GdiplusVersion = 1
-
- If GdiplusStartup(hGdiPlus, uGdiInput) = 0 Then
- If GdipCreateBitmapFromFile(StrPtr(strFName), hGdiImage) = 0 Then
- GdipCreateHBITMAPFromBitmap hGdiImage, hBitmap, 0
- Set LoadImage = ConvertToIPicture(hBitmap)
- GdipDisposeImage hGdiImage
- End If
- GdiplusShutdown hGdiPlus
- End If
- End Function
- Public Function ConvertToIPicture(ByVal hPic As LongPtr) As IPicture
- Dim uPicInfo As PICTDESC
- Dim IID_IDispatch As GUID
- Dim IPic As IPicture
- Const PICTYPE_BITMAP = 1
- With IID_IDispatch
- .Data1 = &H7BF80980
- .Data2 = &HBF32
- .Data3 = &H101A
- .Data4(0) = &H8B
- .Data4(1) = &HBB
- .Data4(2) = &H0
- .Data4(3) = &HAA
- .Data4(4) = &H0
- .Data4(5) = &H30
- .Data4(6) = &HC
- .Data4(7) = &HAB
- End With
- With uPicInfo
- .Size = Len(uPicInfo)
- .Type = PICTYPE_BITMAP
- .hPic = hPic
- .hPal = 0
- End With
- OleCreatePictureIndirect uPicInfo, IID_IDispatch, True, IPic
- Set ConvertToIPicture = IPic
- End Function
复制代码 64位的excel206
用LoadImage() 设置的图片 png图片本身是半透明的
Me.Label22.Picture = LoadImage("D:\学习\Excel\图片素材\bgblk2.png")
Me.Label21.Picture = LoadImage("D:\学习\Excel\图片素材\BGblk.png")
Me.Picture = LoadImage("D:\学习\Excel\图片素材\bg2.jpg")
能载入图片,但是png没有透明的。请高手帮忙看看要怎么样才会有透明度,谢谢了请问这个GDIplus有png透明的属性或方法吗?谢谢各位大哥
要是“hhzjxss”大大能看到,并帮忙说说就好了
|
最佳答案
查看完整内容
图像控件 | Microsoft Docs
https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/image-control
搜的,应该是不支持吧。
|