Mittlerweile funktioniert mein Tool schon soweit dass ich ein PNG File laden kann, die Farben reduzieren und dann wieder als RGB oder Palettenfile speichern kann. Man kann also eine Grafik laden und angeben auf wieviele Farben es reduziert werden soll (bei RGB kann man die Anzahl beliebig reduzieren, bei PNG Palettenformat kann man sowieso nur maximal 256 Farben speichern).
Nur die Berechnung der besten Farbe funktioniert noch nicht ganz richtig, da gibts noch Artefakte wo eine falsche Farbe ausgewählt wird, weil mein erster Ansatz zu naiv ist (aber dafür einfach zu implementieren).
Falls jemand eine Idee hat, wie man das richtig macht, hätte ich nichts gegen ein paar Tips.
Im Wesentlichen ist das Problem folgendes:
Ich habe ein Bild mit (z.B. 8000) Farben. Um die auf 256 zu reduzieren, wähle ich die 256 häufigsten Farben aus damit diese erhalten bleiben. Jede der überzähligen Farben sollte dann so angepasst werden, dass aus den 256 erhaltenen Farben, diejenige ausgewählt wird, welche am "ähnlichsten" ist, und genau da hakt es noch ein wenig. Wie kann ich am Besten beurteilen welche Farbe am ähnlichsten ist?
Im Moment mache ich das einfach so dass ich jeweils für R/G/B die Differenz bilde. Also (R0-R1) + (G0-G1) + (B0-B1). Das ist quasi die Distanz zwischen den beiden Farben. Diejenige mit der geringsten Distanz wird dann genommen. Das Problem dabei ist, dass diese Distanz bei zwei verschiedenen Farben zufällig gleich sein kann, obwohl die eine Farbe besser passt als die andere. Man muss das also irgendwie noch gewichten.