Einführung
Überblick
TPngImage/TPngGraphic auf libpng Basis
PNGUnit
TNGImage
TPNGImage
GraphicEx
Ungetestet
Links
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.
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.
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.
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.
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.
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
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.
Das Buch "Compressed Image File Formats" enthält u.a. eine PNG-Bibliothek für Delphi. Der Quelltext ist auf der Homepageverfügbar.
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