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