आपको चीजें थोड़ी गलत लगी हैं, javaScript रंग को हेक्साडेसिमल के रूप में मॉडल नहीं करता है, न ही सिस्टम। हेक्साडेसिमल संकेतन सिर्फ मानव पठनीय दस्तावेज़ के लिए है। आंतरिक रूप से आपका सिस्टम तीन पूर्णांक मानों को संग्रहीत करता है। आप सीधे उन लोगों से पूछताछ और हेरफेर कर सकते हैं।
लेकिन आपको यह कहने की अनुमति देता है कि आप सिस्टम इंटर्नल्स के बजाय वास्तविक दस्तावेज़ में हेरफेर करना चाहते हैं। तो फिर यह आपके लिए ऐसा करने वाले कुछ पुस्तकालय के लिए अपनी गणना को स्थगित करने के लिए सबसे अच्छा है। आप देख सकते हैं कि ब्राउज़र कई तरह से रंगों का प्रतिनिधित्व कर सकता है, इसलिए आपको सभी प्रकार के मामलों जैसे कि विज्ञापन आरजीबी और एचएसवी इनपुट को प्रोग्राम करना होगा। इसलिए मेरा सुझाव है कि आप Color.js जैसे कुछ का उपयोग करें, यह आपको बहुत सिरदर्द से बचाता है, क्योंकि आपको ब्लेंडिंग, डार्कनिंग , लाइटनिंग आदि को लागू करने की आवश्यकता नहीं है ... स्वयं।
Edity:
यदि आप ऐसा स्वयं करना चाहते हैं, जिसकी मैं अनुशंसा नहीं करता। 0-1 में पूर्णांक या फ्लोटिंग पॉइंट नंबरों के हेक्सरेक्टेशन को चालू करके प्रारंभ करें, इससे गणना आसान हो जाती है।
अब रंग में आसानी से हेरफेर के लिए RGB मानों को HSL या HSB में बदल दें, इससे ब्राइट कैलकुलेशन करने के लिए तुच्छ हो जाता है (विकिपीडिया में योग हैं)। तो फिर बस जोड़ या घटाएँ चमक या चमक। वास्तविक प्रकाश अनुकरण के लिए अभिकलन आसान है बस बेस कलर द्वारा हल्के रंग को गुणा करें। इस प्रकार तटस्थ प्रकाश के लिए बस:
परिणाम = तीव्रता * रंग
जैसा कि राफेल ने समझाया, रंग चैनल द्वारा दोहराया गया सूत्र। आप रंगीन लाइट का अनुकरण कर सकते हैं
परिणाम = तीव्रता * LigtColor * रंग
इसके लिए सबसे पहले फ्लोट में कनवर्ट करना, शायद रेखीय भी। यह आपके क्षेत्र में गर्म या शांत प्रकाश की अनुमति देता है जो अधिक प्राकृतिक अनुभव में ला सकता है।
अल्फा सम्मिश्रण (अन्य के शीर्ष पर रंग की परत) है
परिणाम = ColorTop * अल्फा + ColorBottom * (1-अल्फा)
अंतिम संपादन
अंत में यहाँ कुछ कोड है जो आपके द्वारा पूछे जाने पर कुछ करता है। यह देखने के लिए कठिन है कि इसका सार अभी के रूप में है। लाइव कोड यहां उपलब्ध है
चित्र 1 : नीचे दिए गए कोड का परिणाम भी लाइव संस्करण देखें ।
{
var canvas = document.getElementById('canvas');
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
var Color = function(r, g, b) {
this.r = r;
this.g = g;
this.b = b;
}
Color.prototype.asHex = function() {
return "#" + ((1 << 24) + (this.r << 16) + (this.g << 8) + this.b).toString(16).slice(1);
}
Color.prototype.asRGB = function() {
return 'rgb(' + this.r + ',' + this.g + ',' + this.b + ')';
}
Color.prototype.blendWith = function(col, a) {
r = Math.round(col.r * (1 - a) + this.r * a);
g = Math.round(col.g * (1 - a) + this.g * a);
b = Math.round(col.b * (1 - a) + this.b * a);
return new Color(r, g, b);
}
Color.prototype.Mul = function(col, a) {
r = Math.round(col.r/255 * this.r * a);
g = Math.round(col.g/255 * this.g * a);
b = Math.round(col.b/255 * this.b * a);
return new Color(r, g, b);
}
Color.prototype.fromHex = function(hex) {
// http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
hex = hex.substring(1,7)
var bigint = parseInt(hex, 16);
this.r = (bigint >> 16) & 255;
this.g = (bigint >> 8) & 255;
this.b = bigint & 255;
}
ctx.font = "16px Arial";
ctx.fillText("Manual Alpha Blend", 18, 20);
var a = new Color(220, 0, 150);
var b = new Color();
b.fromHex('#00C864');
//Alpha blend
ctx.fillStyle = a.asHex();
ctx.fillRect(25, 25, 100, 100);
ctx.fillStyle = '#FFFFFF';
ctx.fillText(a.asHex(), 30, 45);
ctx.fillStyle = b.asRGB()
ctx.fillRect(50, 50, 100, 100);
ctx.fillStyle = '#FFFFFF';
ctx.fillText(a.asHex(), 55, 145);
var bl = a.blendWith(b, 0.3);
ctx.fillStyle = bl.asRGB();
ctx.fillRect(50, 50, 75, 75);
ctx.fillStyle = '#FFFFFF';
ctx.fillText(bl.asHex(), 55, 70);
// lighten 1
ctx.fillStyle = '#000000';
ctx.fillText('Neutral Light', 200, 20);
var c = new Color(100, 100, 100);
var purelight= new Color(255, 255, 255);
ctx.fillStyle = c.asRGB();
ctx.fillRect(200, 25, 100, 100);
var bl = c.Mul(purelight,1.2);
ctx.fillStyle = bl.asRGB();
ctx.fillRect(225, 50, 100, 100);
var bl = c.Mul(purelight, 0.8);
ctx.fillStyle = bl.asRGB();
ctx.fillRect(250, 75, 100, 100);
// lighten 2
ctx.fillStyle = '#000000';
ctx.fillText('Yellowish Light', 400, 20);
var c = new Color(100, 100, 100);
var yellowlight= new Color(255, 255, 220);
var bl = c.Mul(yellowlight,1.0);
ctx.fillStyle = bl.asRGB();
ctx.fillRect(400, 25, 100, 100);
var bl = c.Mul(yellowlight,1.2);
ctx.fillStyle = bl.asRGB();
ctx.fillRect(425, 50, 100, 100);
var bl = c.Mul(yellowlight, 0.8);
ctx.fillStyle = bl.asRGB();
ctx.fillRect(450, 75, 100, 100);
}
}
PS आपको स्टैकओवरफ्लो पर पूछना चाहिए क्योंकि यह वास्तव में स्टैकओवरफॉ पर पाया जा सकता है।