Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
Delphi 10.2 Tokyo Professional
|
Re: 24bit RGB nach 8bit indexed color konvertieren
12. Okt 2007, 16:06
Kleiner Nachtrag: mir ist aufgefallen, dass der von mir beschriebene Algorithmus suboptimal arbeitet. Hier die verbesserte Version:
1. Zu einem Quader merken wir uns jeweils den Bereich von-bis auf der R-, G- und B-Achse.
2. Beginne mit dem einen Quader (0-255,0-255,0-255) kleinsten Quader, der alle vorhandenen Farben umschließt.
3. (Hier beginnt die Schleife) Suche den flächenmäßig größten Quader. Hat dieser die Größe 1, dann springe zu Punkt 6.
4. Teile diesen Quader entlang seiner längsten Achse so auf, dass möglichst gleich viele Farben in den beiden entstehenden Hälften sind. Geht dies nicht (alle Farben gleich), dann reduziere diesen Quader auf diese eine Farbe und mache mit Punkt 3 weiter. Achte darauf, evtl. Lücken zwischen zwei benachbarten Farben aus dem Ergebnis auszuschließen bzw. die beiden kleinsten Ergebnisquader zu wählen.
5. Solange wir weniger als 256 Quader haben, mache mit Punkt 3 weiter.
6. (Hier endet die Schleife) Wir sind fast fertig: jetzt entspricht jeder Quader einem späteren Paletten-Eintrag.
7. Ermittle jetzt für jeden Quader den wirklichen mittleren Farbwert der Einzelfarben, die darin liegen. Bei diesem Schritt kann man auch direkt die 256-Farb-Bitmap erstellen, da der Quader-Index ja dem späteren Paletten-Index entspricht.
|