VB 5/6-Tipp 0644: Bilder mit GDI+ zeichnen
von Philipp Stephani
Beschreibung
Dieser Code zeigt die Verwendung von GDI+, der nächsten Generation des Graphic Device Interface, um Bilder darzustellen. Es werden alle gängigen Formate unterstützt, z. B. auch Alphakanal-PNGs.
Testbilder gibt es hier.
Der GDI+-Code kann alle drei korrekt darstellen.
Hinweis: GDI+ wird "von Haus aus" nur von Windows XP und Windows Server 2003 unterstützt. Für Windows NT, 2000, 98 und ME wird das GDI+ RTM benötigt.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: GdipCreateFromHDC, GdipDeleteGraphics, GdipDisposeImage, GdipDrawImage, GdipGetImageDimension, GdipGraphicsClear, GdipLoadImageFromFile, GdiplusShutdown, GdiplusStartup | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Projekt1.vbp ------------- ' Die Komponente 'Microsoft Common Dialog Control 6.0 (SP3) (COMDLG32.OCX)' wird benötigt. '--- Anfang Formular "frmBildMitGDIPlus" alias frmBildMitGDIPlus.frm --- ' Steuerelement: Standarddialog-Steuerelement "cdlDatei" ' Steuerelement: Schaltfläche "cmdLaden" Option Explicit 'Global: Private Declare Function GdiplusStartup Lib "gdiplus.dll" ( _ ByRef token As Long, _ ByRef inputX As GdiplusStartupInput, _ ByVal Output As Long _ ) As Status Private Declare Sub GdiplusShutdown Lib "gdiplus.dll" (ByVal token As Long) 'Graphics: Private Declare Function GdipCreateFromHDC Lib "gdiplus.dll" ( _ ByVal hdc As Long, ByRef graphics As Long _ ) As Status Private Declare Function GdipDeleteGraphics Lib "gdiplus.dll" ( _ ByVal graphics As Long _ ) As Status Private Declare Function GdipGraphicsClear Lib "gdiplus.dll" ( _ ByVal graphics As Long, ByVal color As Long _ ) As Status Private Declare Function GdipDrawImage Lib "gdiplus.dll" ( _ ByVal graphics As Long, ByVal Image As Long, _ ByVal X As Single, ByVal Y As Single _ ) As Status 'Image: Private Declare Function GdipLoadImageFromFile Lib "gdiplus.dll" ( _ ByVal FileName As Long, ByRef Image As Long _ ) As Status Private Declare Function GdipDisposeImage Lib "gdiplus.dll" _ (ByVal Image As Long) As Status Private Declare Function GdipGetImageDimension Lib "gdiplus.dll" ( _ ByVal Image As Long, _ ByRef Width As Single, _ ByRef Height As Single _ ) As Status Private Enum Status Ok = 0 GenericError = 1 InvalidParameter = 2 OutOfMemory = 3 ObjectBusy = 4 InsufficientBuffer = 5 NotImplemented = 6 Win32Error = 7 WrongState = 8 Aborted = 9 FileNotFound = 10 ValueOverflow = 11 AccessDenied = 12 UnknownImageFormat = 13 FontFamilyNotFound = 14 FontStyleNotFound = 15 NotTrueTypeFont = 16 UnsupportedGdiplusVersion = 17 GdiplusNotInitialized = 18 PropertyNotFound = 19 PropertyNotSupported = 20 ProfileNotFound = 21 End Enum Private Type GdiplusStartupInput GdiplusVersion As Long DebugEventCallback As Long SuppressBackgroundThread As Long SuppressExternalCodecs As Long End Type Private m_lngInstance As Long Private m_lngGraphics As Long Private Sub cmdLaden_Click() Dim lngPointer As Long Dim sngWidth As Single Dim sngHeight As Single With Me.cdlDatei .ShowOpen If Len(.FileName) Then GdipLoadImageFromFile StrPtr(.FileName), lngPointer GdipGetImageDimension lngPointer, sngWidth, sngHeight GdipDrawImage m_lngGraphics, lngPointer, _ Rnd * (Me.ScaleWidth - sngWidth), Rnd * (Me.ScaleHeight - sngHeight) GdipDisposeImage lngPointer Me.Refresh End If End With End Sub Private Sub Form_Load() Dim udtData As GdiplusStartupInput Randomize udtData.GdiplusVersion = 1 If GdiplusStartup(m_lngInstance, udtData, 0) Then MsgBox "GDI+ could not be initialized", vbCritical Exit Sub End If If GdipCreateFromHDC(Me.hdc, m_lngGraphics) Then MsgBox "Graphics object could not be created", vbCritical Exit Sub End If End Sub Private Sub Form_Unload(Cancel As Integer) If m_lngGraphics Then If GdipDeleteGraphics(m_lngGraphics) Then _ MsgBox "Graphics object could not be deleted", vbCritical End If GdiplusShutdown m_lngInstance End Sub '--- Ende Formular "frmBildMitGDIPlus" alias frmBildMitGDIPlus.frm --- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Philipp Stephani am 01.08.2010 um 15:01
@Helmut: Fragen zu den Tipps sind besser im Forum aufgehoben (http://foren.activevb.de/cgi-bin/foren/list.pl?forum=4). Diese Notizen sind nicht allzu gut für Diskussionen und Fragen geeignet.
Kommentar von Helmut Kress am 01.08.2010 um 13:22
Möchte eine PNG-Grafik transparent ausdrucken. An welcher Stelle muss ich bei obigem Tipp drehen, dass die Grafik nicht auf die Form, sondern auf das Printer-Objekt gedruckt wir?
Schon mal ganz herzlichen Dank für eine Antwort.
Grüße
Helmut Kreß
Kommentar von am 09.12.2004 um 08:58
Der Link zum GDI+ RTM funktioniert bei mir nicht. Warum?