2013-05-03 11 views
11

क्या ढाल के बीच में एक रंग की गणना करना संभव है?रंग हेक्स की गणना 2 रंग और प्रतिशत/स्थिति

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

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

मेरे पास केवल दो हेक्स स्ट्रिंग हैं, और मैं बदले में एक चाहता हूं।

+0

यह एक सरल रेखीय बीजगणित समस्या है (और आप पहले से ही पता है कि तुम जवाब मिल गया है के बाद से आपके उदाहरण रंगों के लिए)। आपने अभी तक क्या कोड किया है? – Pointy

+0

संभावित डुप्लिकेट [प्रोग्रामेटिक रूप से लाइटन या डार्कन हेक्स रंग (या आरजीबी, और मिश्रण रंग)] (http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or- आरजीबी-एंड-ब्लेंड-रंग) –

उत्तर

29

यह काम करना चाहिए:

यह मूल रूप से शामिल है, उन्हें परिवर्तित दशमलव में आधा खोजने, परिणाम हेक्स के लिए वापस परिवर्तित करने और फिर उन्हें श्रृंखलाबद्ध।

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

तीसरे तर्क को नोट करें -> '0.5' जो 'रंग 1' और 'रंग 2' –

+0

@ कालमार ओब्लीवी - आह, का अनुपात है। उत्तर सही किया गया। – techfoobar

+1

वैसे यह वास्तव में करीब है, लेकिन यदि अनुपात 0 है तो रंग काला है, जबकि यह रंग 1 होना चाहिए। इसके अलावा, r.toString इत्यादि शून्य के साथ पैड नहीं होगा, क्या वे? –

4

मैं इस सवाल का जवाब ऊपर पर टिप्पणी नहीं कर सकता, इसलिए मैं इसे यहाँ लिखें:

मुझे पता चला है कि जावास्क्रिप्ट सबस्ट्रिंग विधि में पैरामीटर के लिए सूचकांक लौटे स्ट्रिंग में शामिल नहीं है। इसका मतलब है कि:

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

//will alert es and NOT est 

संपादित करें: तो यह होना चाहिए:

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

और

parseInt(color1.substring(4,6), 16); 
संबंधित मुद्दे