Seite 3 von 3
Verfasst: 21.09.2008 17:32
von Thorium
LCD hat geschrieben:
Code: Alles auswählen
Procedure RGBdistance(col1,col2)
rd=col1&255-col2&255: gd=col1>>8&255-col2>>8&255: bd=col1>>16&255-col2>>16&255
ProcedureReturn Sqr(rd*rd+gd*gd+bd*bd)
EndProcedure
Sie arbeitem mit zusammengesetzten RGB-Werten wie die von STARGÅTE. Ich benutze sie beim Retro-X und bekomme damit bei jeder Konversion, egal ob Amiga HAM6, C64 oder SAM Coupé immer hervorragende Ergebnise, sofern eine gut gefächerte Palette zur Verfügung steht.
Ok, das ist jetzt merkwürdig. So wie ich das sehe macht diese Prozedur ja genau das gleiche wie Stargates, oder? Nur halt schneller.
Wenn ich aber diese verwende bekomme ich ein ganz anderes Ergebnis.

Ich hab weiter nichts am Code geändert, nur die Prozedur ausgetauscht. Oder hat die nen anderen Rückgabewert? Sollte doch auch ein Float sein, oder?
Hier ein Beispiel, das gleiche Portrai was mit Stargates Prozedur sehr gut aussieht ist mit LCD's Prozedur nur Farbmatsch. Zwar im richtigen Farbton aber naja, seht selbst:
Edit: Ah, die tut nicht genau das gleiche. Ich habe das / Sqr(255*255*3) in Stargates Code nicht beachtet.
Verfasst: 21.09.2008 17:44
von Batze
Was machst du denn mit den Daten sodass das eine Rolle spielt ob da Werte von 0 bis 1 oder von 1 bis 255*255*3 rauskommen?
Verfasst: 21.09.2008 17:48
von Thorium
Batze hat geschrieben:Was machst du denn mit den Daten sodass das eine Rolle spielt ob da Werte von 0 bis 1 oder von 1-256*256*256*3 rauskommen?
Tja, das frag ich mich grad auch, sollte eigentlich wurscht sein.
Die Konverterprozedur vergleicht halt anhand der hier beschriebenen Prozeduren die RGB-Werte und merkt sich den Palettenindex, falls die Farbdistanz niedriger ist als beim letzten Vergleich. So hab ich am Ende der Schleife den Palettenindex der am besten passt. Im Prinzip sollte es wurscht sein ob die bereiche in kleinen oder großen Werten liegen. Es sei den wir haben hier wieder ein Problem mit signed und unsigned. Ich muss das grad mal genauer untersuchen.
Verfasst: 21.09.2008 17:54
von Batze
Thorium hat geschrieben:Esseiden wir haben hier wieder ein Problem mit signed und unsigned. Ich muss das grad mal genauer untersuchen.
Bei Floats?, wusste ich noch garnichts von dass es das da gibt.
Verfasst: 21.09.2008 17:56
von Thorium
Entwarnung, der Fehler lag, wie zu erwarten, bei mir. Funzt jetzt einwandfrei.
Problem war: Da ich ja nach prüfe ob der Distanzwert kleiner ist als der letzte gemerkte, brauche ich für den Einstieg in die Schleife dort einen sehr hohen Wert. Wenn der bei 0 liegt wurde die Schleife ja sonst nie was passendes finden.

Den hatte ich wegen den niedrigen Werten von Stargates Prozedur nur auf 10.
Den hochgesetzt und es funzt wunderbar.
Verfasst: 22.09.2008 00:42
von Thorium
Das macht richtig Spaß mir den Farben und Paletten rumzuhantieren, hätte ich garnicht gedacht.
Bin noch einen Schritt weiter und kann nun mehr als die 32 Farben nutzen, die das Spiel für die Portrais nutzt. Deswegen poste ich hier nochmal. Falls jemand soetwas für ein andere Spiel machen möchte, sollte er genaue Tests mit der dynamischen Palette durchführen. Bei Schicksalsklinge gibt es einige mehr Farben, in der Palette, die nicht wechseln. Also kann man auch mehr verwenden.

Der Unterschied ist deutlich zu erkennen.
Zum besseren Vergleich hab ich mal ein Vergleichsbild erstellt. Die bearbeiteten Portrais sind um das vierfache vergrößert, damit man die Details gut sieht.
Bild1: unbearbeitets Portrai von Mandara aus Schatten über Riva
Bild2: das Portrai auf 32x32 Pixel skaliert
Bild3: konvertiert mit der standart Palette (32 Farben)
Bild4: konvertiert mit der erweiterten Palette (ca. 70 Farben)
