PNG -Bibliothek zum Lesen und Schreiben von PNG -Bildern in Kombination mit einer TBITMAP32 -Klasse aus der GR32 -Bibliothek.
Um die Bibliothek zu verwenden, stellen Sie sicher, dass Sie die Einheit GR32_PNG verwenden. Dieses Gerät verwendet GR32_PORTALNETWORKGRAPHICS, um PNG -Dateien zu lesen und zu schreiben, wodurch es erforderlich ist, die Datei auch Ihrem Projekt hinzuzufügen. Oder fügen Sie einfach das Verzeichnis dem Bibliotheksweg hinzu.
Der einfachste Weg, um ein PNG in eine TBitMap32 -Instanz zu laden, ist die Verwendung:
LoadBitmap32FromPNG(Bitmap: TBitmap32; const Filename: string);
Sie können überprüfen, ob es sich bei der Datei um eine gültige PNG -Datei handelt
function IsValidPNG(const Filename: string): Boolean;
Wenn die PNG -Datei von einem Stream stammt, kann auch ein Stream verwendet werden
LoadBitmap32FromPNG(Bitmap: TBitmap32; Stream: TStream);
wie in
var
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
MemoryStream.LoadFromFile(FileName);
LoadBitmap32FromPNG(Bitmap, Stream);
finally
MemoryStream.Free;
end;
end;
Dies kann besonders nützlich sein, wenn die PNG -Datei als Ressource in die ausführbare Datei eingebettet ist. In diesem Fall können Sie Tresourcestream problemlos verwenden
Um den Inhalt einer TBitMap32 -Instanz in einer PNG -Datei zu speichern oder die Funktionen zu streamen:
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; FileName: string);
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; Stream: TStream);
kann verwendet werden.
Wenn Sie die einfachen Funktionen verwenden, können Sie den Fortschritt während des Ladens nicht verfolgen. Dazu müssen Sie eine Instanz von Tportablenetworkgraphic32 erstellen und die PNG -Datei manuell laden. Vor dem Laden können Sie einen On -Progress -Handler angeben, um den Fortschritt zu verfolgen. Der Code sieht dann so aus:
with TPortableNetworkGraphic32.Create do
try
OnProgress := OnProgressHandler;
LoadFromFile(Filename);
AssignTo(YourBitmap); // can be Image32.Bitmap for example
finally
Free;
end;
Wo der Onprogresshandler so aussieht:
procedure TForm1.OnProgressHandler(Sender: TObject; Percent: Single);
begin
ProgressBar.Position := Round(Percent);
end;
Wenn Sie beim Speichern einige Einstellungen ändern möchten, müssen Sie dies auch manuell tun. Der Code kann dann so aussehen:
with TPortableNetworkGraphic32.Create do
try
AssignTo(YourBitmap); // can be Image32.Bitmap for example
Interlaced := imAdam7; // save as interlaced png file
SaveToFile(Filename);
finally
Free;
end;
Mit dem aktuellen Implementierungsstand ist es nicht möglich, alles zu ändern, ohne in einer ungültigen PNG -Datei zu enden. Sie können beispielsweise das Bild so umwandeln, dass sie eine pallete verwenden und die Palette vor dem Speichern ändern oder löschen. Dies gibt Ihnen keinen Fehler, aber höchstwahrscheinlich wird das Bild nicht von anderen Programmen (oder zumindest vom Originalbild) lesbar sein.