Du musst halt zunächst mal einen
Farbreduzierungsalgorithmus implementieren. Bekannte Verfahren sind Octree und Median-Schnitt. Das Median-Schnitt-Verfahren ist selbst dann verlustbehaftet, wenn das Ausgangsbild bereits weniger Farben als angegeben hat. Diese Verfahren werden zudem oft mit einem
Dithering-Algorithmus (auch Fehlerdiffusion genannt) kombiniert, am bekanntesten sind Floyd-Steinberg und Stucki. Dithering erhöht die Dateigröße stark.
Und jede (Alpha-)Transparenz des PNGs geht verloren.
Korrigiere mich, aber soweit ich weiß haben unterhalb 32bit nur "Grayscale" Bilder einen Alphachannel?
Das ist falsch. Unterstützt bloß kaum ein Programm. Beispiel ist angehängt.
Bei der Masse an Code die Du zeigst um zu sehen wie ein Bild in Dein Programm gelangt, so könnte es funktionieren MeinBild.PixelFormat := pf8Bit;
Teste das mal vorm speichern.
Das wird nicht gehen, da erst komplexe Algorithmen angewandt werden müssen (siehe oben).