title: LoadImage PNG in excel vba form image1.picture control, black background
body: <p>I have code which load png images to picture control</p>
  
  <pre><code>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 = &amp;H7BF80980
          .Data2 = &amp;HBF32
          .Data3 = &amp;H101A
          .Data4(0) = &amp;H8B
          .Data4(1) = &amp;HBB
          .Data4(2) = &amp;H0
          .Data4(3) = &amp;HAA
          .Data4(4) = &amp;H0
          .Data4(5) = &amp;H30
          .Data4(6) = &amp;HC
          .Data4(7) = &amp;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
  </code></pre>
  
  <p>But png images loading with black backgrounds instead of transparent? how to fix this?</p>