RGB मान को देखते हुए, मैं एक टिंट (या शेड) कैसे बना सकता हूं?


124

आरजीबी मूल्य को देखते हुए, जैसे 168, 0, 255, मैं कैसे रंग बनाते हैं (इसे हल्का बनाते हैं) और रंगों का रंग (इसे गहरा बनाते हैं)?

जवाबों:


153

के अलावा कई विकल्प छायांकन और tinting के लिए:

  • रंगों के लिए, प्रत्येक घटक को उसके पिछले मूल्य के 1/4, 1/2, 3/4, आदि से गुणा करें। छोटा कारक, गहरा छाया।

  • टिंट्स के लिए, गणना करें (255 - पिछले मान), 1/4, 1/2, 3/4, आदि से गुणा करें (अधिक से अधिक कारक, हल्का टिंट), और पिछले मान में जोड़ें (प्रत्येक मानते हुए .component एक 8-बिट पूर्णांक है)।

ध्यान दें कि रंग जोड़तोड़ (जैसे कि टिंट और अन्य छायांकन) को रैखिक आरजीबी में किया जाना चाहिए । हालांकि, दस्तावेजों में निर्दिष्ट आरजीबी रंग या छवियों और वीडियो में एन्कोडेड रैखिक आरजीबी में होने की संभावना नहीं है, इस मामले में आरजीबी रंग के प्रत्येक घटक के लिए एक तथाकथित उलटा स्थानांतरण फ़ंक्शन को लागू करने की आवश्यकता है। यह फ़ंक्शन RGB रंग स्थान के साथ बदलता रहता है। उदाहरण के लिए, sRGB कलर स्पेस में (जिसे माना जा सकता है कि RGB कलर स्पेस अनजान है), यह फ़ंक्शन लगभग प्रत्येक sRGB कलर कंपोनेंट (0 से लेकर 1 तक) को 2.2 की पावर तक बढ़ाने के बराबर है। (ध्यान दें कि "रैखिक आरजीबी" आरजीबी रंग का स्थान नहीं है।)

वायलेट जिराफ़ की टिप्पणी "गामा सुधार" के बारे में भी देखें।


20
मैंने इसे आज़माया और इसने बहुत काम किया। मुझे लगा कि सूत्रों के उदाहरण लिखना उपयोगी होगा। मूल (आर, जी, बी); शेड (रु, जी एस, बी एस): rs = r * 0.25, gs = g * 0.25, bs = b * 0.25(है कि एक बहुत अंधेरा छाया है); टिंट (आर टी, जीटी, बीटी): rt = r + (0.25 * (255 - r)), gt = g + (0.25 * (255 - g)), bt = b + (0.25 * (255 - b))(है कि एक बहुत प्रकाश टिंट है)। मैंने इसे एक शांत सरणी के भाग के रूप में किया, जिसने बहुत सारे रंग बनाए और इसने बहुत अच्छा काम किया। उम्मीद है की वो मदद करदे। धन्यवाद पीटर।
थॉमस

1
आपने गलती की है। यह वाइसवेरा है।
फ्रांसेस्को मेंजानी

क्या आप सुनिश्चित हैं कि ये हेरफेर गामा सुधार के लिए नहीं होना चाहिए?
वायलेट जिराफ

1
@ वायलेटगिरिफ़: आप गामा सुधार के साथ एक अच्छा बिंदु बनाते हैं। मेरा संपादन देखें। (यह 22 घंटे पहले की मेरी एक हटाई गई टिप्पणी को बदल देता है।)
पीटर ओ।

97

कुछ परिभाषाएँ

  • एक शेड को "काला करना" एक रंग या "काला जोड़ना" द्वारा निर्मित होता है
  • एक टिंट "लिग्थेनिंग" एक ह्यू या "व्हाइट जोड़ना" द्वारा निर्मित होता है

टिंट या शेड बनाना

आपके रंग मॉडल के आधार पर, गहरा (छायांकित) या हल्का (रंगा हुआ) रंग बनाने के लिए विभिन्न विधियाँ हैं:

  • RGB:

    • छाया करना:

      newR = currentR * (1 - shade_factor)
      newG = currentG * (1 - shade_factor)
      newB = currentB * (1 - shade_factor)
      
    • टिंट करने के लिए:

      newR = currentR + (255 - currentR) * tint_factor
      newG = currentG + (255 - currentG) * tint_factor
      newB = currentB + (255 - currentB) * tint_factor
      
    • अधिक आम तौर पर, रंग एक रंग के RGB(currentR,currentG,currentB)साथ एक लेयरिंग के परिणामस्वरूप होता RGBA(aR,aG,aB,alpha)है:

      newR = currentR + (aR - currentR) * alpha
      newG = currentG + (aG - currentG) * alpha
      newB = currentB + (aB - currentB) * alpha
      

    जहां (aR,aG,aB) = black = (0,0,0)छायांकन के लिए, और (aR,aG,aB) = white = (255,255,255)टिनिंग के लिए

  • HSVया HSB:

    • छाया करने के लिए: Value/ Brightnessया को कम करेंSaturation
    • टिंट करने के लिए: Saturationया कम बढ़ाएँ Value/Brightness
  • HSL:
    • छाया करने के लिए: कम Lightness
    • टिंट करने के लिए: वृद्धि Lightness

एक रंग मॉडल से दूसरे में बदलने के सूत्र मौजूद हैं। अपने प्रारंभिक प्रश्न के अनुसार, यदि आप अंदर हैं RGBऔर HSVउदाहरण के लिए छाया में मॉडल का उपयोग करना चाहते हैं, तो आप बस परिवर्तित कर सकते HSVहैं, छायांकन कर सकते हैं और वापस परिवर्तित कर सकते हैं RGB। रूपांतरित करने के लिए सूत्र तुच्छ नहीं हैं, लेकिन इंटरनेट पर पाए जा सकते हैं। आपकी भाषा के आधार पर, यह एक कोर फ़ंक्शन के रूप में भी उपलब्ध हो सकता है:

मॉडलों की तुलना करना

  • RGB लागू करने के लिए वास्तव में सरल होने का लाभ है, लेकिन:
    • आप केवल अपने रंग को अपेक्षाकृत बढ़ा सकते हैं
    • अगर आपका रंग पहले से ही रंगा हुआ है या छायांकित है तो आपको कोई अंदाजा नहीं है
  • HSVया HSBजटिल है, क्योंकि आपको जो चाहिए उसे पाने के लिए दो मापदंडों के साथ खेलना होगा ( Saturationऔर Value/ Brightness)
  • HSL मेरे दृष्टिकोण से सबसे अच्छा है:
    • CSS3 द्वारा समर्थित (वेबएप्प के लिए)
    • सरल और सटीक:
      • 50% एक अनछुए ह्यू का मतलब है
      • >50% इसका मतलब है कि धुंध हल्का है (टिंट)
      • <50% इसका मतलब है कि ह्यू गहरा है (शेड)
    • एक रंग दिया गया है जिसे आप निर्धारित कर सकते हैं कि यह पहले से ही रंगा हुआ है या छायांकित है
    • आप रंग या छाया को अपेक्षाकृत या पूरी तरह से रंग सकते हैं (केवल Lightnessभाग को बदलकर )


1
मेरा मानना ​​है कि यहां "एक शेड" ह्युइंग "ए ह्यू" द्वारा निर्मित किया गया है, ह्यू द्वारा, आपका मतलब रंग से है। क्योंकि यदि आप एचएसएल / एचएसवी के रूप में ह्यू के बारे में बात कर रहे हैं, तो इसे बदलने से एक अलग रंग का उत्पादन होगा, न कि एक शेड / टिंट। ह्यू (0-360 °), अपने आप से, गहरा / हल्का नहीं हो सकता। एक रंग छाया / टिंट देने के लिए, किसी को SL / SV मूल्यों को संशोधित करना होगा। यह परिभाषा किसी को यह सोचने में गुमराह कर सकती है कि रंग बदलने से गहरा / हल्का रंग पैदा होगा।

शेड वर्जन केवल रंगों की रेंज के लिए काम करता है, जो कि आपकी कलर रेंज के आधे को कलर चैनल वैल्यू से जोड़ता है, फिर गणित करते हैं और फिर उस रेंज को घटाते हैं। यदि आपके रंग पर हस्ताक्षर किए गए हैं और आप इस उद्देश्य के अनुसार काम करने के कारण कुछ को नष्ट किए बिना गणना कर सकते हैं।
t0b4cc0

3

मैं वर्तमान में कैनवास और पिक्सेल के साथ प्रयोग कर रहा हूं ... मुझे लग रहा है कि यह तर्क मेरे लिए बेहतर काम करता है।

  1. ग्रे-नेस (लूमा?) की गणना करने के लिए इसका उपयोग करें।
  2. लेकिन मौजूदा मूल्य और नए 'टिंट' मूल्य दोनों के साथ
  3. अंतर की गणना करें (मैंने पाया कि मुझे गुणा करने की आवश्यकता नहीं है)
  4. 'टिंट' मान को ऑफ़सेट करने के लिए जोड़ें

    var grey =  (r + g + b) / 3;    
    var grey2 = (new_r + new_g + new_b) / 3;
    
    var dr =  grey - grey2 * 1;    
    var dg =  grey - grey2 * 1    
    var db =  grey - grey2 * 1;  
    
    tint_r = new_r + dr;    
    tint_g = new_g + dg;   
    tint_b = new_b _ db;
    

या कुछ इस तरह का...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.