Hi,
I use TFPWriterPNG to save a PNG image from TFPCustomImage with max compression.
Even with clMax compression a resulting PNG in 1.3x larger than the same PNG image saved in Photoshop or another editor.
Yes, I know that TFPCustomImage works at 64-bit per pixel, and I set TFPWriterPNG.WordSized:=False to convert it to 32-bit pixel format.
My project doesn't use LCL and I can use only pure FPC code.
FPC 3.2.0 / Lazarus 2.0.10
program PngSaveTest;
{$APPTYPE CONSOLE}
{$ifdef fpc}{$mode Delphi}{$endif}
uses
Classes, FPImage, FPWritePNG, FPReadPNG, ZStream;
procedure SavePNG;
type TReadKlas = class of TFPCustomImageReader;
var
image: TFPCustomImage;
Ireader: TFPCustomImageReader;
IWriter: TFPWriterPNG;
Reader : TReadKlas;
begin
Image := TFPMemoryImage.Create(8, 8);
reader:=TFPReaderPNG;
IReader:=Reader.Create;
Image.LoadFromFile('Src.png',IReader);
iReader.Free;
IWriter := TFPWriterPNG.Create;
IWriter.UseAlpha:=False;
IWriter.WordSized:=False;
IWRiter.CompressionLevel:=clMax;
Image.SaveToFile('Dst.png',IWriter);
IWriter.Free;
image.Free;
end;
begin
SavePng;
end.