Bibliothèque PNG pour la lecture et l'écriture d'images PNG en combinaison avec une classe TBITMAP32 de la bibliothèque GR32.
Afin d'utiliser la bibliothèque, assurez-vous d'utiliser l'unité GR32_PNG. Cette unité utilise GR32_PortableNetworkGraphics pour lire et écrire des fichiers PNG, ce qui rend également nécessaire d'ajouter le fichier à votre projet. Ou ajoutez simplement le répertoire au chemin de la bibliothèque.
La façon la plus simple de charger un PNG vers une instance TBitMap32 consiste à utiliser:
LoadBitmap32FromPNG(Bitmap: TBitmap32; const Filename: string);
Vous pouvez vérifier si le fichier est un fichier PNG valide en utilisant
function IsValidPNG(const Filename: string): Boolean;
Si le fichier PNG provient d'un flux que l'on peut également utiliser
LoadBitmap32FromPNG(Bitmap: TBitmap32; Stream: TStream);
comme dans
var
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
MemoryStream.LoadFromFile(FileName);
LoadBitmap32FromPNG(Bitmap, Stream);
finally
MemoryStream.Free;
end;
end;
Cela peut être particulièrement utile si le fichier PNG est intégré en tant que ressource dans l'exécutable. Dans ce cas, vous pouvez facilement utiliser Tresourcestream
Pour enregistrer le contenu d'une instance TBITMAP32 dans un fichier PNG ou diffuser les fonctions:
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; FileName: string);
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; Stream: TStream);
peut être utilisé.
Si vous utilisez les fonctions simples, vous ne pourrez pas suivre les progrès pendant le chargement. Pour ce faire, vous devez créer une instance de TportableNetWorkGraphic32 et charger manuellement le fichier PNG. Avant de charger réellement, vous pouvez spécifier un gestionnaire OnProgress pour suivre les progrès. Le code ressemblera alors à ceci:
with TPortableNetworkGraphic32.Create do
try
OnProgress := OnProgressHandler;
LoadFromFile(Filename);
AssignTo(YourBitmap); // can be Image32.Bitmap for example
finally
Free;
end;
Où le OnProgressHandler peut ressembler à ceci:
procedure TForm1.OnProgressHandler(Sender: TObject; Percent: Single);
begin
ProgressBar.Position := Round(Percent);
end;
Si vous souhaitez modifier certains paramètres lors de l'enregistrement, vous devez également le faire manuellement. Le code peut alors ressembler à ceci:
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;
Avec l'état actuel de l'implémentation, il n'est pas possible de tout modifier sans se terminer dans un fichier PNG non valide. Par exemple, vous pouvez convertir l'image pour utiliser une palette, puis modifier ou supprimer la palette avant d'enregistrer. Cela ne vous donnera pas d'erreur, mais très probablement l'image ne sera pas lisible par d'autres programmes (ou du moins différent de l'image d'origine).