Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2006.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie die GDI+-Bibliothek kennen und haben Sie Bilddateien unter VBA im Griff

Techniken

Bilder, GDI+, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

mdlGDIPlus.bas

Bilder im Griff mit VBA und GDI+

Sascha Trowitzsch, Berlin

Bilder und Access sind - verlässt man sich auf die Anzahl der Anfragen in Newsgroups und Foren - ein interessantes Gespann. Um richtig mit Bildern zu arbeiten, wäre es doch gut, per VBA etwa Bilddateien einzulesen, anzupassen oder unter einem anderen Datentyp wieder zu speichern. Wenn möglich, soll das Ganze auch noch ohne zusätzliche Tools funktionieren. Geht nicht? Doch: mit den richtigen Wrapper-Funktionen für die zuständige Windows-Bibliothek haben Sie Ihre Bilder schnell im Griff.

Bilder in Access

Für den Einsatz von Bilddateien in Access und in Office im Allgemeinen gibt es eine Menge Möglichkeiten: das Speichern von Bildern in der Datenbank, Icons, die in der Anwendung eingesetzt werden und so weiter. Das macht alles umso mehr Spaß, je flexibler der Umgang mit den Bildern wird.

Anforderungen an Bilddatenbank und Co.

Folgende grundlegende Anforderungen stellen sich technisch an Bilddatenbanken und ähnliche Projekte:

  • Bilddateien verschiedener Formate sollten geladen werden können.
  • Die Bilder sollten zur Erstellung von Vorschaubildern in brauchbarer Qualität skaliert (verkleinert) werden können.
  • Der Umfang des dazu benötigten Codes sollte überschaubar bleiben.
  • Externe Komponenten

    Da Access/VBA keine Funktionen dieser Art bereithält, ist dabei der Einsatz externer Komponenten gefragt. Zu den bekannteren und leistungsfähigeren kostenlosen Lösungen gehören das sehr komplexe ImageMagick und das etwas einfachere, aber auch kleinere FreeImage.

    Hinweis

    Im Beitrag Digitale Fotografien im Griff (Shortlink 315) können Sie nachlesen, wie sich die externe Anwendung ImageMagick per VBA ansprechen lässt. Dies ist vor allem interessant, wenn Sie komplexere Änderungen an Bildern vornehmen möchten - etwa um dynamisch einen Schriftzug in das Bild einzubetten. (

    Wie beim Einsatz von Komponenten von Drittherstellern üblich, kann man nicht voraussetzen, dass die benötigten Bibliotheken auf allen Zielrechnern der Anwendung vorhanden sind. Für die Weitergabe von Anwendungen ist dies denkbar schlecht - um den Benutzer nicht übermäßig zu strapazieren, müsste man schon eine Setup-Routine für die Anwendung inklusive zusätzlicher Komponenten mitliefern.

    Grafikfunktionen on Board

    Seit Windows XP liefert das Microsoft-Betriebssystem alles mit, was man benötigt - zwar werden die gewünschten Funktionen nicht auf dem Silbertablett präsentiert wie bei externen Komponenten, aber mit ein wenig Programmierarbeit lässt sich eine brauchbare Schnittstelle erzeugen. Auf diese Weise spart man sich das Installieren zusätzlicher Software und hat weiterhin eine Datenbankanwendung "aus einem Guss" - die .mdb-Datei enthält dann auch die Aufrufe der Methoden der GDI+-Bibliothek.

    Die Rohmaterialien in Form von API-Aufrufen finden Sie in der Bibliothek GDI+. Wie diese Bibliothek den Einsatz externer Komponenten überflüssig macht, zeigen die folgenden Abschnitte. GDI+ ist die Weiterentwicklung des Windows-GDI (GDI= Graphical Device Interface). Das ist die Sammlung von API-Funktionen, die in Windows für (fast) alle grafischen Operationen verantwortlich ist (daneben gibt es noch DirectX/DirectDraw, das aber erst im kommenden Windows Vista eine größere Rolle spielt).

    Alles, was Sie auf der Benutzeroberfläche zu sehen bekommen, ist also das Ergebnis von GDI-Funktionen. Mit Erscheinen von Windows XP hat Microsoft eine völlig neue Version des GDI auf den Markt gebracht und sie GDIPlus genannt. Sie hat mit dem alten GDI praktisch nichts mehr gemein und übertrifft dieses in Bezug auf Umfang, Komplexität und Aufbau um Welten. Aus Kompatibilitätsgründen ist natürlich weiterhin das alte GDI in Windows XP/Windows 2003 Server enthalten. Microsoft empfiehlt jedoch ausdrücklich in Anwendungen den Umstieg auf die neue Schnittstelle.

    GDI+ für (fast) alle

    Wer noch mit Windows-Versionen älter als Windows XP arbeitet und denkt, er findet in diesem Beitrag keine nützlichen Informationen mehr, kann beruhigt sein: Sie sind nämlich keineswegs gezwungen, auf Windows XP umzusteigen, um in den Genuss von GDI+ zu kommen.

    Microsoft bietet einen freien Download der GDIPLUS.DLL an, der bis zu W98 hinab einsetzbar ist (http://www.microsoft.com/downloads/
    details.aspx?FamilyID=6a63ab9c-df12-4d41-
    933c-be590feaa05a&DisplayLang=en, einfach in das Windows-Systemverzeichnis kopieren; eine Registrierung ist nicht erforderlich).

    Funktionen von GDI+

    In den Beispieldateien zu diesem Beitrag finden Sie ein Modul namens mdlGDIPlus (gespeichert unter dem Dateinamen mdlGDIPlus.bas), das viele Funktionen für den Zugriff auf Bilddateien über die GDI+-Bibliothek enthält - und dennoch nur einen winzigen Ausschnitt aus deren Welt zeigt. Wenn Sie das Modul in das VBA-Projekt einer Access-Datenbank importiert haben, können Sie auf die folgenden Funktionen zugreifen:

  • IsGDIPInstalled: Prüft, ob die GDI+-Bibliothek installiert ist.
  • InitGDIP: Initialisiert GDI+.
  • ShutDownGDIP: Räumt GDI+ auf (wichtig: da GDI+ objektorientiert programmiert ist, kann ein vergessenes Freigeben der Objekte zu Abstürzen führen).
  • LoadPictureGDIP: Lädt ein Bild mit dem als Parameter angegebenen Dateinamen in ein StdPicture-Objekt. Die Funktion unterstützt derzeit die folgenden Formate: bmp, gif, jp(e)g, tif, png, wmf, emf und ico.
  • ResampleGDIP: Skaliert das übergebene Picture-Objekt mit den angegebenen Dimensionen und schärft die neue Version gegebenenfalls.
  • MakeThumbGDIP: Erstellt ein Thumbnail aus einem Picture-Objekt. Das bedeutet, dass das Bild in einen Rahmen mit der angegebenen Breite und Höhe eingepasst und der Rand in der gewünschten Farbe gefüllt wird.
  • GetDimensionsGDIP: Liefert die Maße eines Picture-Objekts in Form einer TSize-Struktur, die die Höhe und Breite des Bildes in Pixeln enthält.
  • SavePicGDIPlus: Speichert ein Picture-Objekt in die Datei mit dem angegebenen Namen wahlweise als BMP, GIF, PNG oder JPG - Letzteres mit wählbarer Qualitätsstufe.
  • ArrayFromPicture: Liefert ein Byte-Array mit dem Bild als Inhalt zurück. Die enthaltene Funktion ist in Zusammenhang mit Access bisher einzigartig: Das Bild wird während der Umwandlung nicht in eine Datei gespeichert, sondern über ein OLE-Stream-Objekt in ein Byte-Array überführt. Der Code kommt ohne jegliche zusätzliche Type Library aus, weil er den Stream über das versteckte stdole.IUnknown erzeugt und dabei ausschließlich OLE-API-Funktionen verwendet. Diese Funktion ist für das Speichern eines Bildes in ein Binärfeld einer Tabelle (OLE-Datentyp) von Bedeutung.
  • ArrayToPicture: Diese Funktion ist das Pendant zu der zuvor beschriebenen Funktion ArrayFromPicture. Ein Binärfeld einer Tabelle kann damit in ein Bildobjekt umgewandelt werden.
  • Zusätzlich liefert das Modul noch einige Toolfunktionen:

  • GetIconPic: Liefert das Shell-Icon zu der Anwendung, die der per Dateinamen angegebenen Datei in Windows zugeordnet ist, als Picture-Objekt.
  • GetScreenRes: Ermittelt die aktuelle Bildschirmauflösung und liefert eine TSize-Struktur mit Höhe und Breite (Einheit Pixel).
  • BitmapToPicture: Erzeugt ein Picture-Objekt aus dem per Handle angegebenen Windows-Bitmap.
  • ShowhModFile: Gibt den Pfad und den Dateinamen der aktuell verwendeten GDI+-Bibliothek zurück (dient Kontrollzwecken).
  • GDI+-Funktionen im Einsatz

    Um die oben vorgestellten GDI+-Funktionen in Ihrer Datenbank zu verwenden, müssen Sie lediglich das Modul mdlGDIPlus in die gewünschte Datenbank importieren.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.