Delphi PNG und MNG Bibliotheken


Inhaltsverzeichnis:

Einführung
Überblick

TPngImage/TPngGraphic auf libpng Basis
PNGUnit
TNGImage
TPNGImage
GraphicEx

Ungetestet

Links



Einführung

Hier sollen verschiedene Freeware PNG Bibliotheken mit Source für Delphi vorgestellt werden, die derzeit angeboten werden. Die Beschreibungen entsprechen dabei dem Stand, der mir beim Schreiben bekannt war. Sollten sich in der Zwischenzeit Änderungen ergeben haben oder trifft eine Aussage von mir nicht zu, dann wäre ich für eine Rückmeldung dankbar.



Überblick

Generell kann man zwischen zwei Implementierungsformen unterscheiden. Die eine Form setzt auf vorhandene C-Bibliotheken auf, die als DLL mitgeliefert werden. Bei der anderen wird der gesamte Code statisch in die Anwendung gelinkt, eine DLL wird nicht benötigt.

Derzeit bilden zwei dynamisch gelinkte C-Bibliotheken die Grundlage für Delphi-Bibliotheken, die libpng und die libmng. Die auf die libpng basierenden Bibliotheken gehen alle auf PNGImage von Edmund Hand zurück. Eine andere Umsetzung auf dieser Basis stammt von Jack Goman. Die bisher einzige auf die libmng basierende Bibliothek ist TNGImage.

Bei den statisch gelinkten Bibliotheken gibt es TPngImage von Gustavo Daud und GraphicEx von Mike Lischke.

PNG bietet zahlreiche Möglichkeiten, um Bilder optimal anzeigen oder weiterverarbeiten zu können und ermöglicht es dem Benutzer zusätzliche Informationen zu übermitteln. Sämtliche Bibliotheken unterstützen die häufigst benutzten Varianten, bei weniger häufig auftretenden Varianten gibt es dann schon erhebliche Abstriche.



TPngImage/TPngGraphic auf libpng Basis

Diese Bibliothek wurde von Edmund H. Hand entwickelt und von Uberto Barbini, Eric Engler, Dominique Louis und David J. Taylor weiterentwickelt.

Diese Bibliothek kann die meistbenutzen Varianten interpretieren, bei vielen anderen Varianten ist die Anzeige jedoch fehlerhaft. Von einigen eigenen Tests her weiß ich, daß dies auf die verwendete Anbindung der libpng beruht, die libpng selbst ist in der Lage, die Bilder korrekt zu interpretieren.
Die Klassen stellen einige zusätzliche Möglichkeiten von PNG zur Verfügung, TPngGraphic bietet eine VCL-kompatible Einbindung. Zusätzlich exisiert eine alternative Unit (PNG.pas), welche der VCL-Philosophie folgt und TSharedImage benutzt.

Die neueste Version basiert auf der libpng 1.0.8. Die Version von David J. Taylor basiert auf der libpng 1.0.6. Für beide Versionen steht eine normale und eine pentiumoptimierte und damit schnellere DLL zur Verfügung. Leider enthalten die DLLs keine ohne Einbindung auslesbare Versionsinformation, die Bezeichnungen sind gleich und die verschiedenen Bibliotheken benötigen die korrekte Version. Deshalb sollte die DLL nur in das Anwendungsverzeichnis kopiert werden, was eine gemeinsame Benutzung durch verschiedene Anwendungen leider ausschließt.

Download:
Nachdem sich auf der Seite von Eric Engler kein Hinweis mehr auf libpng befindet, steht nur noch die alternative Version auf der Seite von David J. Taylor zur Verfügung.



PNGUnit

Auch diese Bibliothek basiert auf die Bibliothek von Edmund H. Hand.

Diese Bibliothek ist ein PNG zu Bitmap und Bitmap zu PNG Konverter. Einziger Parameter beim Speichern ist die Transparenzfarbe. Die Bibliothek basiert auf die libpng 1.0.1.

Download:
Seite von Jack Goman.



TNGImage

Diese Bibliothek ist die erste Bibliothek mit PNG, MNG und JNG Unterstützung. Sie stammt von Gerard Juyn, der gleichzeitig auch der Hauptauthor der libmng ist.

Zum Testen bin ich noch nicht gekommen.

Download:
Hauptseite oder Mirror.



TPNGImage

Nach langer Zeit der Stille hat Gustavo Daud seine Entwicklung fortgesetzt und es gibt wieder eine offizielle Seite. Und erfreulich, die neue Version ist noch besser, als die vorhergehenden.

Diese Bibliothek interpretiert fast alle PNG Varianten korrekt, einzig der Hintergrund-Chunk wird nicht ausgewertet. Zusätzliche Informationen können problemlos eingebunden werden, wenn die Software dies vorsieht. Dazu stehen entsprechende Events und Klassen zur Verfügung. Ich persönlich empfinde diese Bibliothek vom Desig her als die gelungenste Umsetzung, die derzeit verfügbar ist.

Neu ist, daß die PNG-Klasse per bedingter Compilierung entweder direkt von TGraphic abgeleitet ist oder direkt von TObject. Letzters ermöglicht schlanke Programme.

Weiterhin neu ist die volle Unterstützung des Alpha-Kanals beim Zeichnen, d.h. die Bilder können auch halbtransparent ausgegeben werden.

Download:
Portable Network Graphics Delphi



GraphicEx

Bei dieser Bibliothek handelt es sich um einen Dateiformat zu TBitmap-Konverter. Praktisch heißt dies, daß die Dateien beim Laden in eine Bitmap verwandelt werden und die 'Rohdaten' anschließend nicht mehr zur Verfügung stehen. Demzufolge sind die Möglichkeiten zur Unterstützung verschiedenster Features auch entsprechend eingeschränkt. Innerhalb dieses Rahmens werden die Bilder korrekt interpretiert. Ein Speichern von Dateien ist vom Design her nicht vorgesehen, was die Verwendungsmöglichkeiten zusätzlich einschränkt.

Mittlerweile ist GraphicEx OpenSource unter der MPL.

Download:
Mike Lischke's Grafikseite.



Ungetestet

Das Buch "Compressed Image File Formats" enthält u.a. eine PNG-Bibliothek für Delphi. Der Quelltext ist auf der Homepageverfügbar.



Links

Umfangreiche Linksammlung für verschiedene Formate
PNG-Homepage
PNG-Homepage (niederländischer Mirror)
MNG-Homepage
MNG-Homepage (niederländischer Mirror)
libpng
libpng (niederländischer Mirror)
libmng
libmng (Mirror in USA)
Testbilder
MNG-PlugIns für Webbrowser