Biblioteca PNG para leer y escribir de imágenes PNG en combinación con una clase TBITMAP32 de la biblioteca GR32.
Para usar la biblioteca, asegúrese de usar la unidad GR32_PNG. Esta unidad utiliza GR32_PortableNetWorkGraphics para leer y escribir archivos PNG, lo que hace que sea necesario agregar el archivo a su proyecto también. O simplemente agregue el directorio a la ruta de la biblioteca.
La forma más sencilla de cargar un PNG a una instancia TBITMAP32 es usar:
LoadBitmap32FromPNG(Bitmap: TBitmap32; const Filename: string);
Puede verificar si el archivo es un archivo PNG válido usando
function IsValidPNG(const Filename: string): Boolean;
Si el archivo PNG proviene de una transmisión, también se puede usar
LoadBitmap32FromPNG(Bitmap: TBitmap32; Stream: TStream);
como en
var
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
MemoryStream.LoadFromFile(FileName);
LoadBitmap32FromPNG(Bitmap, Stream);
finally
MemoryStream.Free;
end;
end;
Esto podría ser especialmente útil si el archivo PNG está integrado como recurso en el ejecutable. En este caso, puede usar fácilmente TresourCestream
Para guardar el contenido de una instancia TBITMAP32 en un archivo PNG o transmitir las funciones:
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; FileName: string);
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; Stream: TStream);
se puede usar.
Si usa las funciones simples, no podrá rastrear el progreso durante la carga. Para hacerlo, debe crear una instancia de tortableNetWorkGraphic32 y cargar el archivo PNG manualmente. Antes de cargar, puede especificar un controlador OnProgress para rastrear el progreso. El código se verá así:
with TPortableNetworkGraphic32.Create do
try
OnProgress := OnProgressHandler;
LoadFromFile(Filename);
AssignTo(YourBitmap); // can be Image32.Bitmap for example
finally
Free;
end;
Donde el OnProgressHandler podría verse así:
procedure TForm1.OnProgressHandler(Sender: TObject; Percent: Single);
begin
ProgressBar.Position := Round(Percent);
end;
Si desea cambiar algunas configuraciones mientras se guarda, también necesita hacer esto manualmente. El código puede verse así:
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;
Con el estado actual de implementación no es posible alterar todo sin terminar en un archivo PNG inválido. Por ejemplo, puede convertir la imagen para usar una paleta y luego alterar o eliminar la paleta antes de guardar. Hacerlo no le dará un error, pero probablemente la imagen no será legible por otros programas (o al menos diferentes a la imagen original).