Welche sRGB-Farbe ist eigentlich am weitesten von den C64-Farben entfernt?
Vom Bauchgefühl würde ich ein sehr dunkles Blau annehmen, aber vielleicht hat das schonmal jemand richtig berechnet.
Es gibt 56 Antworten in diesem Thema, welches 19.118 mal aufgerufen wurde. Der letzte Beitrag (
Welche sRGB-Farbe ist eigentlich am weitesten von den C64-Farben entfernt?
Vom Bauchgefühl würde ich ein sehr dunkles Blau annehmen, aber vielleicht hat das schonmal jemand richtig berechnet.
Du mischst zwei Farbsysteme durcheinander, die nichts miteinander zu tun haben.
RGB ist ein Farbmischsystem, während in der Anfangszeit der Heimcomputer spezifische Farben generiert wurden.
Du mischst zwei Farbsysteme durcheinander, die nichts miteinander zu tun haben.
RGB ist ein Farbmischsystem, während in der Anfangszeit der Heimcomputer spezifische Farben generiert wurden.
Imho passt die Frage doch: welcher Punkt im sRGB Farbraum ist am weitesten entfernt von dem nächsten der 16 diskreten Farben des c64.
Die PAL- und sRGB-Farbräume sind anscheinend fast deckungsgleich.
Aber ja, die dunkelblaue Ecke da unten links scheint am weitesten entfernt zu sein. (Unklar, inwiefern die 16 diskreten Punkte da noch eine Rolle spielen.)
Worauf zielt die Frage ab? ![]()
Bitte melde dich an, um dieses Bild zu sehen.
Worauf zielt die Frage ab?
Rein Gedanklich:
Du hast am PC irgendwas in C64-Farben umrechnen lassen, und sitzt nun vor einem Bild, das nur 16 sRGB-Farben benutzt. Zur Darstellung von Farbfehlern o.Ä. wäre nun eine weitere Farbe schön, die sich möglichst gut von allen C64-Farben abhebt. Welche wäre das?
Rein Gedanklich:
Du hast am PC irgendwas in C64-Farben umrechnen lassen, und sitzt nun vor einem Bild, das nur 16 sRGB-Farben benutzt. Zur Darstellung von Farbfehlern o.Ä. wäre nun eine weitere Farbe schön, die sich möglichst gut von allen C64-Farben abhebt. Welche wäre das?
Orange?
Und etwas ernstgemeinter: Knallpink?
Wenn es um Freisteller oder Alpha-Kanäle geht, verwendet man tatsächlich gerne Pink / Magenta.
Ansonsten sehe ich aber weiterhin die Schwierigkeit bei der Definition des "weitesten Abstandes". Wenn ich die C64 Farben in Photoshop öffne, konvertiere ich sie ja in das RGB-Farbsystem. Un din dem moment sind es eben RGB-Mischfarben. Dunkelblau wird Dunkelgrau sehr nahe kommen, was ja logischerweise aus R, G und B zusammengemischt wird.
Hab hier ein Plugin, das Bilder als Punktwolken in einem 3D-Würfel darstellt.
Wo bringt man am besten eine weitere Farbe unter, die am weitesten von ihrem nächsten Nachbarn entfernt liegt?
Knallpink ist für den Zweck eine sehr gute Farbe, weil sie sich sehr deutlich von den anderen Farben abhebt. Aber EIGENTLICH ist sie von Magenta und Hellrot nicht so weit weg, so dass ich mir eine noch entferntere Farbe vorstellen kann.
Mir scheint, ich sollte ein kleines Progrämmchen für die Antwort machen?
Bitte melde dich an, um diesen Anhang zu sehen.
Mir scheint, ich sollte ein kleines Progrämmchen für die Antwort machen?
ich hab das mal gemacht, relativ simpel, ich betrachte den farbraum als ein linearen Raum mit den Achsen R G B je von 0 bis 255. Jetzt iteriere ich Durch alle Farben im Raum und bestimme die kürzeste Distanz zu allen der 16 C64 farben nach Bitte melde dich an, um diesen Link zu sehen..
Anschließend nehme ich die Farbe mit der längsten kürzesten Länge, das wäre #2755CC
Ja, das ist ist mit menschlichem Auge betrachtet nicht unbedingt richtig, helle Farben sind näher beieinander, die Achsen skalieren unterschiedlich und so, keine frage.
#2755CC
Genau das meinte ich, Matsch-Blau ![]()
Mir kommt grad ne Idee, ich muss da mal was programmieren...
Wo bringt man am besten eine weitere Farbe unter, die am weitesten von ihrem nächsten Nachbarn entfernt liegt?
Wenn du willst, dass die Farbe am weitesten von den bekannten 16 C64-Farben entfernt AUSSIEHT, dann machst du die 3D-Berechnung am Besten im Lab-Farbraum (nicht in RGB), weil nur dort Farb-Abstände nach Wahrnehmung gewichtet sind.
Und irgendwo in Bitte melde dich an, um diesen Link zu sehen. wurden die C64-Farben nochmal (besser als von Pepto) durchgemessen und meines Wissens auch u.a. in Lab festgehalten.
Ich verwende für Markierungen in C64-Screens meistens Orange oder das extremste RGB-Grün – die hauen immer sofort raus.
Wenn du willst, dass die Farbe am weitesten von den bekannten 16 C64-Farben entfernt AUSSIEHT, dann machst du die 3D-Berechnung am Besten im Lab-Farbraum (nicht in RGB), weil nur dort Farb-Abstände nach Wahrnehmung gewichtet sind.
So ganz ausschließlich nur dort wohl nicht. ![]()
Gibt z.B. auch sowas Bitte melde dich an, um diesen Link zu sehen.
(Wenn Du CIE LAB meintest. Dieser Farbraum da hat auch die Koordinaten L, a und b.)
So ganz ausschließlich nur dort wohl nicht.
Mein "nur" bezog sich auf die "üblichen Verdächtigen", wie sRGB, HSV, YUV, XYZ, Lab ...
(jeder kann sich natürlich einen eigenen Farbraum basteln und den gewichten, wie er will – auch nach Wahrnehmung)
Knallpink ist für den Zweck eine sehr gute Farbe, weil sie sich sehr deutlich von den anderen Farben abhebt. Aber EIGENTLICH ist sie von Magenta und Hellrot nicht so weit weg, so dass ich mir eine noch entferntere Farbe vorstellen kann.
So rein Wahrnehmungs-technisch fallen vielleicht generell quietschbunte Bonbon-Farben am meisten auf.
Wenn man mal die C-64-Palette gegen die vom VDC oder Spectrum vergleicht, gibt's bestimmt neben Pink noch ein paar weitere gute Kandidaten.
Kann mir vorstellen, dass alle weniger intensiv-bunten Farben dann auch schnell weniger gut auffallen.
Hoogo Wenn du im Lab-Farbraum irgendwas berechnen solltest, dann würde ich gerne deine Zeit beanspruchen, wenn du das zuließest und auch Spaß an der Sache hättest. Ich überlege nämlich, wie man eine bestimmte Anzahl von Farben im Lab-Farbraum so verteilt, dass sie im Raum (und nicht nur an der Oberfläche) möglichst gut verteilt sind. Also kurz: Die "perfekte" 32-, 64- oder 128-Farben-Palette – weit entfernt von den bekannten aus den 80ern.
Rein Gedanklich:
Du hast am PC irgendwas in C64-Farben umrechnen lassen, und sitzt nun vor einem Bild, das nur 16 sRGB-Farben benutzt. Zur Darstellung von Farbfehlern o.Ä. wäre nun eine weitere Farbe schön, die sich möglichst gut von allen C64-Farben abhebt. Welche wäre das?
Und kurz quergedacht: Könnte aus diesem Konverter nicht auch ein animiertes GIF (2 Frames, eigene 24-Bit-RGB-Palette) mit maximal flimmernden Fehlpixeln rausfallen? ![]()
Wenn du willst, dass die Farbe am weitesten von den bekannten 16 C64-Farben entfernt AUSSIEHT, dann machst du die 3D-Berechnung am Besten im Lab-Farbraum (nicht in RGB), weil nur dort Farb-Abstände nach Wahrnehmung gewichtet sind.
Vom Bauchgefühl her tendiere ich eher zu einem linearen RGB, aber vom Prinzip her ist es ja Wurst, was die Zahlen bedeuten.
Gibt z.B. auch sowas Bitte melde dich an, um diesen Link zu sehen.
(Wenn Du CIE LAB meintest. Dieser Farbraum da hat auch die Koordinaten L, a und b.)
Auf den Farbraum hab ich letzten noch anderswo Hinweise gefunden, mehr Lesestoff:
Bitte melde dich an, um diesen Link zu sehen.
Bitte melde dich an, um diesen Link zu sehen.
Hoogo Wenn du im Lab-Farbraum irgendwas berechnen solltest, dann würde ich gerne deine Zeit beanspruchen, wenn du das zuließest und auch Spaß an der Sache hättest. Ich überlege nämlich, wie man eine bestimmte Anzahl von Farben im Lab-Farbraum so verteilt...
Was für ein schöner Zufall, letzter Tage habe ich noch nach einem Algo gesucht, um Dinge möglichst gut unterscheidbar einzufärben. Musste nur gut genug sein, aber ich hab da bestimmt was in meiner Linksammlung behalten. Ist jedenfalls nicht so einfach, nicht mal 2D.
Und kurz quergedacht: Könnte aus diesem Konverter nicht auch ein animiertes GIF (2 Frames, eigene 24-Bit-RGB-Palette) mit maximal flimmernden Fehlpixeln rausfallen?
Naja, ich dachte mir, eine Palette aus den schlechtesten 30 Farben oder so zu erstellen, ein entsprechend vorbereitetes Bild in einen Converter zu stecken und je nach Ergebnis die Programmierer zu trollen. Aber was Sinnvolles lässt sich daraus bestimmt auch machen.
vom Prinzip her ist es ja Wurst, was die Zahlen bedeuten.
Nun ja, es ist aber kein Würfel, auf dem die Achsen nur anders heißen als bei RGB. Ein bisschen mehr Bitte melde dich an, um diesen Link zu sehen. steckt da schon drin.
Bitte melde dich an, um diesen Anhang zu sehen.
Aber wenn das aus deiner Sicht keinen Unterschied in der Komplexität macht, dann um so besser.
Nun ja, es ist aber kein Würfel, auf dem die Achsen nur anders heißen als bei RGB. Ein bisschen mehr Bitte melde dich an, um diesen Link zu sehen. steckt da schon drin.
Bitte melde dich an, um diesen Anhang zu sehen.
Aber wenn das aus deiner Sicht keinen Unterschied in der Komplexität macht, dann um so besser.
Du hast Recht, ich hätte da ganz schmerzfrei Lab an einen Würfel geschrieben und viele Farben mit L=0 verwendet.
Konnte man denn die Abstände zweier Farben in Lab nicht trotzdem einfach euklidisch berechnen?
Mist, das ist schon wieder alles so lange her...
Falls da jemand mit spielen wollo, so hab ich das lustige blau ermittelt:
#include <stdio.h>
const int allColors[16 * 3] = { // all the glorious c64 colors according to
0x00, 0x00, 0x00,
0xff, 0xff, 0xff,
0x88, 0x00, 0x00,
0xaa, 0xff, 0xee,
0xcc, 0x44, 0xcc,
0x00, 0xcc, 0x55,
0x00, 0x00, 0xaa,
0xee, 0xee, 0x77,
0xdd, 0x88, 0x55,
0x66, 0x44, 0x00,
0xff, 0x77, 0x77,
0x33, 0x33, 0x33,
0x77, 0x77, 0x77,
0xaa, 0xff, 0x66,
0x00, 0x88, 0xff,
0xbb, 0xbb, 0xbb,
};
int colorDistance(int r1, int g1, int b1, int r2, int g2, int b2) {
return (r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2);
}
int colorDistanceAllColors(int r, int g, int b) {
int distance = 194566; //distance between #000000 and #ffffff
int tmp;
for (int i = 0; i < 16; i++) {
tmp = colorDistance(r, g, b, allColors[i * 3], allColors[i * 3 + 1], allColors[i * 3 + 2]);
if (tmp >= distance)
continue;
distance = tmp;
}
return distance;
}
void main(void) {
for (int r = 0; r < 256; r++) {
for (int g = 0; g < 256; g++) {
for (int b = 0; b < 256; b++) {
int dist = colorDistanceAllColors(r, g, b);
printf("%05d #%02x%02x%02x\n", dist, r, g, b);
}
}
}
}
Alles anzeigen
die 16*3 werte sind die 16 c64 farben.
Ausgabe ist zeilenweise für jede mögliche farbe in einem 24bit rgb farbraum die distanz zur nächsten farbe gefolgt beim farbwert in hex mit # davor.
Die Ausgabe an sich ist relativ wertlos, aber einmal durch sort gepiped und die Welt ist heile.
Der Distanzwert ist an sich unbrauchbar, um da eine echte Distanz zu bekommen müsste man noch die Wurzel ziehen, aber da die werte nur sortiert werden sollen, aber die tatsächliche länge egal ist spare ich mir das, kostet nur zeit.
Der Spaß get erstaunlich schnell, mit -O3 braucht das gut 2 Sekunden, sort braucht dann doch eher 30.