LoadImage PNG-Datei im excel-vba-form image1.picture control, schwarzer hintergrund

Habe ich code das laden von png-Bildern auf picture-control -

Option Explicit
Option Private Module

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 Long
    hPal As Long
End Type

Private Type GdiplusStartupInput
    GdiplusVersion As Long
    DebugEventCallback As Long
    SuppressBackgroundThread As Long
    SuppressExternalCodecs As Long
End Type

Private Declare Function GdiplusStartup Lib "GDIPlus" ( _
    token As Long, _
    inputbuf As GdiplusStartupInput, _
    Optional ByVal outputbuf As Long = 0) As Long

Private Declare Function GdipCreateBitmapFromFile Lib "GDIPlus" ( _
    ByVal FileName As Long, _
    bitmap As Long) As Long

Private Declare Function GdipCreateHBITMAPFromBitmap Lib "GDIPlus" ( _
    ByVal bitmap As Long, _
    hbmReturn As Long, _
    ByVal background As Long) As Long

Private Declare Function GdipDisposeImage Lib "GDIPlus" ( _
    ByVal Image As Long) As Long

Private Declare Function GdiplusShutdown Lib "GDIPlus" ( _
    ByVal token As Long) As Long

Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _
    PicDesc As PICTDESC, _
    RefIID As GUID, _
    ByVal fPictureOwnsHandle As Long, _
    IPic As IPicture) As Long

Public Function LoadImage(ByVal strFName As String) As IPicture
    Dim uGdiInput As GdiplusStartupInput
    Dim hGdiPlus As Long
    Dim hGdiImage As Long
    Dim hBitmap As Long

    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 Long) 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

Aber png-Bilder laden mit schwarzem hintergrund anstatt transparent? wie man dieses Problem beheben?

Wenn ich speichern png -, gif-brauche ich nicht diese Funktion überhaupt
Sind Sie noch auf der Suche nach einer Lösung für dieses? Wenn ja, könnte ich ein workaround für Sie.
Würden Sie bitte teilen Sie Ihre workaround für all die anderen Leute finden diese Frage? 🙂

InformationsquelleAutor user3588043 | 2014-05-15

Schreibe einen Kommentar