Farbähnlichkeit zweier RGB-Werte ermitteln

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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. :freak: 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:
Bild

Edit: Ah, die tut nicht genau das gleiche. Ich habe das / Sqr(255*255*3) in Stargates Code nicht beachtet.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von Thorium am 21.09.2008 17:58, insgesamt 1-mal geändert.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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. :wink: Den hatte ich wegen den niedrigen Werten von Stargates Prozedur nur auf 10. :roll:

Den hochgesetzt und es funzt wunderbar.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Das macht richtig Spaß mir den Farben und Paletten rumzuhantieren, hätte ich garnicht gedacht. :mrgreen:

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.

Bild
Der Unterschied ist deutlich zu erkennen. 8)

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)
Bild
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten