Hi(gh)!
Seit einigen Monaten bastele ich an einem C++-Programm (auf dem PC unter Linux und Windows, nicht auf dem C 64!), das aus (vorher auf 160 x 200 skalierten) RGB-Bildern C 64-Bilder im Multicolor-Modus erzeugen soll. Die bloße Umrechnung auf die C 64-Palette funktioniert einwandfrei - allerdings müssen danach ja die insgesamt 1000 4 x 8-Pixel-Bereich des Bildes darauf untersucht werden, ob sie mehr als 4 Farben enthalten und gegebenfalls die überzähligen Farben durch eine oder mehrere der vier häufigsten Farben ersetzt werden.
In meinem Programm (yip - Yadgar's Image Processor, das Programm hat auch noch viele andere Funktionen, die nichts mit C 64-Retrografik zu tun haben), ist dafür die Funktion c64multicolor_correct() (ganz am Ende des Quelltexts mit dem Hauptprogramm und den Funktionsdefinitionen) zuständig.
Zur besseren Verdeutlichung hier erst mal ein Link auf das komplette
Paket mit Quelltexten, Log und einem Beispielbild:
http://www.rock-o-data.de/yip_20180707.tar.gz
Das Bild muss mit folgendem yip-Kommando bearbeitet werden:
yip -c64 koeln_160x200.tga multicolor 0 1
Konkret passiert gegenwärtig leider Folgendes: wenn ich eine Reihe von 4 x
8-Pixelbereichen auf überzählige Farben prüfe, dann stimmen die Pixelanzahlen für die gefundenen
Farben, teilweise sogar die gefundenen Farben selbst nicht mit dem
(vorläufig ohne diese Korrektur) abgespeicherten Bild überein.
Zwei Beispiele:
Im 4 x 8-Bereich 8/128 bis 12/136 sollten laut gespeichertem "C
64-Rohbild" gefunden werden:
1 x türkisgrün - rgb <48,230,198>
4 x "weiß" - rgb <253,254,252>
12 x hellgrau - rgb <164,167,162>
10 x mittelgrau - rgb <112,116,111>
4 x schwarz - rgb <0, 0, 0>
1 x dunkelblau - rgb <33,27,174>
Tatsächlich findet c64multicolor_correct():
1 x türkisgrün - rgb <48,230,198>
4 x "weiß" - rgb <253,254,252>
12 x hellgrau - rgb <164,167,162>
10 x mittelgrau - rgb <112,116,111>
4 x dunkelgrau - rgb <66,69,64> // Abweichung!
1 x dunkelblau - rgb <33,27,174>
Ein anderes Beispiel, 4 x 8-Bereich 16/128 bis 20/136:
Sollwerte laut gespeichertem Bild:
14 x mittelgrau - rgb <112,116,111>
8 x schwarz - rgb <0, 0, 0>
7 x dunkelgrau - rgb <66,69,64>
2 x hellrot - rgb <254, 74, 87>
1 x orange - rgb <184, 65, 4>
Tatsächlich gefunden:
14 x mittelgrau - rgb <112,116,111>
4 x schwarz - rgb <0,0,0> // Abweichung!
7 x dunkelgrau - rgb <66,69,64>
4 x hellgrau - rgb <164,167,162> // Abweichung!
2 x hellrot - rgb <254,74,87>
1 x orange - rgb <184,65,4>
Hier stimmt nicht einmal die Anzahl der Farben überein!
Fällt euch dazu etwas ein?
Bis bald im Khyberspace!
Yadgar