Nächste Standardfarbe von beliebiger Farbe bestimmen
Hat jemand eine Idee, wie man bei gegebener beliebiger Farbe die am ähnlichsten passende Standardfarbe (aus 216 Farben) bestimmen kann? Zu den Farben vgl. zB http://www.starhtml.de/online/farben.htm#216Standardfarben Errechnet wurde also zB #76726C und das Ergebnis sollte ein Farbname oder wieder ein Hex-Wert sein. Al
Moin Al, Am Mittwoch, 7. September 2005 23:18 schrieb Al Bogner:
Hat jemand eine Idee, wie man bei gegebener beliebiger Farbe die am ähnlichsten passende Standardfarbe (aus 216 Farben) bestimmen kann? Zu den Farben vgl. zB http://www.starhtml.de/online/farben.htm#216Standardfarben
Errechnet wurde also zB #76726C und das Ergebnis sollte ein Farbname oder wieder ein Hex-Wert sein.
Kochrezept: - du zerlegst den hex string in seine 3 Komponenten echo "#76726C" | cut -b 2,3 für den rot Anteil - für jede Komponente bestimmst du diejenige Std. Komponente mit der geringsten differenz zu deinem errechneten Wert um das prinzip zu verdeutlichen: for j in 22 33 54 FC aa Bc Da a1 1a; do echo "0x$j" | awk -W non-decimal-data \ 'BEGIN{lastdiff=256;stdwert=0} { for ( a=0; a<257;a=a+(0x33+0x0) ){ input=($1+0); absdiff=gensub("-","","g",(a - input))+0; printf( "std: %i inp: %i diff: %i absdiff: %i\n", a, input, (a-input),absdiff); if(absdiff<lastdiff) { stdwert=a; lastdiff=absdiff; } # if } # for printf("stdwert: %x , input %x\n", stdwert , input) ; }' ; done Die äussere Schleife erzeugt Testwerte in der awk Schleife wird der std wert bestimmt der die geringste differenz zum input hat. Wenn du nun die Testein- und Ausgaben entfernst und das Ganze so umbaust das du das für alle 3 Grundfarben machst hast du die std. farbe. Gruss Falk
Am Mittwoch, 7. September 2005 23:18 schrieb Al Bogner:
Hat jemand eine Idee, wie man bei gegebener beliebiger Farbe die am ähnlichsten passende Standardfarbe (aus 216 Farben) bestimmen kann? Zu den Farben vgl. zB http://www.starhtml.de/online/farben.htm#216Standardfarben
Errechnet wurde also zB #76726C und das Ergebnis sollte ein Farbname oder wieder ein Hex-Wert sein.
Al
Das ist eigentlich ganz einfach. An Deiner Beispielfarbe will ich das mal ausführen: Die erste Stelle des Hex-RGB-Wertes wird auf den nächsten Netscape-Wert gerundet. Die zweite Stelle wird dann der ersten Stelle angeglichen. R=76 G=72 B=6C -> R=66 G=66 B=66 Weitere Beispiele: AF58C9 -> 9966CC 02B95C -> 00CC66 Ich hoffe, das war jetzt nicht allzu verwirrt ausgedrückt... Gruss Mario
participants (3)
-
Al Bogner
-
Falk Sauer
-
Mario van der Linde