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? 🙂
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich diese Funktion (Hinweis: die Funktion kann auch in ein separates Modul):
Den
PastPicture
routine von Stephen Bullen und gefunden hier (direkter download-link). Im Falle von link rot, hier ist eine Kopie dermodPastePicture
. Speichern Sie alle inmodPastePicture.bas
, dann importieren Sie diese Datei in den VBA-editor.InformationsquelleAutor Patrick Lepelletier
Warum nicht verwenden Sie Einfügen/Bild, das png-Dateien akzeptiert? Sie können noch ein makro zuweisen.
AFAIK nur png-Dateien unterstützen transparente Hintergründe.
Wenn es für ein userform, ich weiß nicht, was Sie hinzufügen können, unterstützt transparente Objekte. Allerdings ist Ihr hintergrund sollte statisch sein, so können Sie fake it.
Vielleicht könnten Sie einfach passen Sie die Farbe hinter dem Bild? Sie können die Farbe code aus dem Formular-Eigenschaften.
Wenn es ein statischer hintergrund, aber nicht eine einzige Farbe, man könnte einen screen-shot clip, den Bereich, den Sie möchten, als hintergrund für das Bild, layer 2 Bilder zusammen in ein Foto-editor, dann Ausgabe als bmp, das wird reduzieren Sie die zwei Schichten wie ein. Es gibt Kostenlose Foto-Editoren, die das können.
InformationsquelleAutor TakenItEasy