2013-05-03 8 views
11

Ist es möglich, eine Farbe in der Mitte eines Gradienten zu berechnen?Berechnen Sie die Farbe HEX mit 2 Farben und Prozent/Position

var color1 = 'FF0000'; 
var color2 = '00FF00'; 

// 50% between the two colors, should return '808000' 
var middle = gradient(color1, color2, 0.5); 

Ich habe nur zwei Hex-Strings, und ich möchte eine im Gegenzug.

+0

Es ist eine einfache lineare Algebra Problem (und Sie wissen bereits, dass da Sie haben die Antwort für Ihre Beispielfarben). Was hast du bis jetzt programmiert? – Pointy

+0

mögliches Duplikat von [Programmatisch Aufhellen oder Abdunkeln einer Hex-Farbe (oder rgb und Mischen von Farben)] (http://stackoverflow.com/questions/5560248/programmatisch-lighten-or-darken-a-hex-color-oder- rgb-und-mischung-farben) –

Antwort

29

sollte diese Arbeit:

Es geht ihnen grundsätzlich die Umwandlung der Hälften in Dezimalzahlen, finden, die Ergebnisse zurück an hex konvertieren und verketten sie dann.

var color1 = 'FF0000'; 
var color2 = '00FF00'; 
var ratio = 0.5; 
var hex = function(x) { 
    x = x.toString(16); 
    return (x.length == 1) ? '0' + x : x; 
}; 

var r = Math.ceil(parseInt(color1.substring(0,2), 16) * ratio + parseInt(color2.substring(0,2), 16) * (1-ratio)); 
var g = Math.ceil(parseInt(color1.substring(2,4), 16) * ratio + parseInt(color2.substring(2,4), 16) * (1-ratio)); 
var b = Math.ceil(parseInt(color1.substring(4,6), 16) * ratio + parseInt(color2.substring(4,6), 16) * (1-ratio)); 

var middle = hex(r) + hex(g) + hex(b); 
+0

beachten Sie das dritte Argument -> '0,5', das ist das Verhältnis von' color1' und 'color2' –

+0

@KalamarObliwy - Ahh, verpasst, dass. Antwort korrigiert – techfoobar

+1

Nun, das ist in der Tat eng, aber wenn Verhältnis 0 ist, dann ist die Farbe schwarz, während es Farbe1 sein sollte. Außerdem wird der r.toString usw. nicht mit Nullen aufgefüllt, oder? –

4

Ich kann nicht oben auf der Antwort kommentieren, so schreibe ich es hier:

Ich fand heraus, dass in der Teilkette Methode Javascript des Index für den Parameter nicht im zurückgegebenen String enthalten ist. Das heißt:

var string = "test"; 
//index: 
alert(string.substring(1,3)); 

//will alert es and NOT est 

Edit: So sollte es sein:

parseInt(color1.substring(0,2), 16); 
parseInt(color1.substring(2,4), 16); 

und

parseInt(color1.substring(4,6), 16); 
Verwandte Themen