मैं .NET का उपयोग करके हेक्साडेसिमल रंग कोड से रंग कैसे प्राप्त करूं?


592

मैं हेक्साडेसिमल कलर कोड (जैसे #FFDFD991) से रंग कैसे प्राप्त कर सकता हूं ?

मैं एक फाइल पढ़ रहा हूं और एक हेक्साडेसिमल रंग कोड प्राप्त कर रहा हूं। मुझे System.Windows.Media.Colorहेक्साडेसिमल रंग कोड के लिए संबंधित उदाहरण बनाने की आवश्यकता है । क्या ऐसा करने के लिए ढांचे में एक इनबिल्ट विधि है?


3
हैश कोड से शायद उनका मतलब # 00ff00 होगा?
मार्क बायर्स

12
विकी - हैश कोड के रूप में उस का उल्लेख न करें । यह भ्रमित करने वाला है। ;-) यह एक रंग का हेक्साडेसिमल प्रतिनिधित्व है।
विले होलेब्रांडसे

10
#FF0000एक HTML (या हेक्साडेसिमल) रंग कोड है, हैश कोड नहीं। कृपया अंतर सीखें।
SLKs

10
प्रतीक # को कई देशों में हैश कहा जाता है, इसलिए भ्रम है।
ज्योफएम

4
@ लक्ष्मण ??? आपको गलत समझा जा सकता है कि C # में GetHashCode () क्या है। GetHashCode () .NET में प्रत्येक ऑब्जेक्ट पर एक विधि है । यह रंग वर्ग से एक हेक्साडेसिमल मान वापस नहीं करता है।
जॉन

जवाबों:


735

मैं मान रहा हूँ कि एक ARGB कोड है ... क्या आप System.Drawing.Colorया का जिक्र कर रहे हैं System.Windows.Media.Color? उदाहरण के लिए WPF में उत्तरार्द्ध का उपयोग किया जाता है। मैंने किसी को अभी तक इसका उल्लेख नहीं करते देखा है, इसलिए यदि आप इसकी तलाश कर रहे हैं तो बस:

using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");

@Thorarin अल्फा वैल्यू कैसे प्राप्त करें, इस बारे में कोई मदद करने के लिए मुझे वेब डिज़ाइन के लिए सीएसएस आरजीबीए के साथ संगत होने के लिए इस मान को बदलने की आवश्यकता है।
सिद्धार्थ पांडेय

2
@Yoda पहले दो अंक (FF) अल्फा वैल्यू हैं। Color.FromArgbहालांकि इस मामले में विधि का उपयोग करना आसान है । यदि आप फ़्लोटिंग पॉइंट अल्फा का उपयोग करते हैं, तो आपको 255 से गुणा करना होगा।
थोरिन

2
यदि आपके पास RGB मान है -> Color.FromArgb (255,192,0)
Iman

50
string hex = "# FFFFFFF"; रंग _ रंग = प्रणाली। क्रॉलिंग।कोलरट्रांसलेटर। फ्रॉम एचटीएमएल (हेक्स);
हर्षल दोशी जैन

1
इसके बजाय color.FromArgb () का उपयोग क्यों नहीं करें?
निमित्ज ई।

549

आप (जैसे # FFCC66 के रूप में हेक्स कोड कहा जाता है,) एचटीएमएल प्रकार आरजीबी कोड मतलब मान लें, का उपयोग ColorTranslator वर्ग:

System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");

यदि, हालांकि आप ARGB हेक्स कोड का उपयोग कर रहे हैं, तो आप System.Windows.Mediappp से ColorConverter वर्ग का उपयोग कर सकते हैं :

Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or      = (Color) ColorConverter.ConvertFromString("#FFCC66") ;

115

यदि आप ColorTranslator का उपयोग नहीं करना चाहते हैं, तो आप इसे आसानी से कर सकते हैं:

string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);

कलरकोड ARGB मूल्य का सिर्फ हेक्साडेसिमल प्रतिनिधित्व है।

संपादित करें

यदि आपको एक पूर्णांक के बजाय 4 मानों का उपयोग करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं (कई टिप्पणियों का संयोजन):

string colorcode = "#FFFFFF00";    
colorcode = colorcode.TrimStart('#');

Color col; // from System.Drawing or System.Windows.Media
if (colorcode.Length == 6)
    col = Color.FromArgb(255, // hardcoded opaque
                int.Parse(colorcode.Substring(0,2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(2,2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(4,2), NumberStyles.HexNumber));
else // assuming length of 8
    col = Color.FromArgb(
                int.Parse(colorcode.Substring(0, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(2, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(4, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(6, 2), NumberStyles.HexNumber));

नोट 1 : NumberStyles System.Globalization में है।
नोट 2 : कृपया अपनी स्वयं की त्रुटि जाँच प्रदान करें (रंगकोड 6 या 8 वर्णों का एक षोडश आधारी मूल्य होना चाहिए)


3
Color.FromArgb को एक, r, g और b पैरामीटर की आवश्यकता होती है, पूर्णांक नहीं।
नागरिक कॉन

7
यह भी उपयोगी है यदि आप कॉम्पैक्ट फ्रेमवर्क का उपयोग कर रहे हैं जिसमें ColorTranslator उपलब्ध नहीं है
TechyGypo

7
@ user1763532 - आर, जी और बी के लिए colorcode = colorcode.Replace("#", "")बस के बाद का उपयोग करें int a = byte.parse(colorcode.Substring(0,2), NumberStyles.HexNumber);। प्रतिस्थापन के पहले पैरामीटर को बदलना न भूलें - सूचकांक - आर के लिए 2 के साथ, जी के लिए 4 और बी के लिए 6।
एम। मिम्पेन

3
@HansKesting, FromArgb1 पैरामीटर System.Drawing.Colorऔर 4 पैरामीटर्स मेंSystem.Windows.Media.Color
torvin

2
ध्यान दें कि यह 4 बाइट के लिए काम करता है (उदाहरण। #FFFFFFFF) HTML रंग (अल्फा)। यदि आप 3 बाइट (#FFFFFF) अल्फा के साथ प्रयास करते हैं तो अल्फा 0 होगा और आपका रंग पारदर्शी होगा। यदि रंग कोड 8/9 वर्ण से कम है, तो आप अल्फा को सम्मिलित कर सकते हैं। कॉम्पैक्ट फ्रेमवर्क के लिए बढ़िया।
एपीसी

40

यह साफ सुथरा छोटा विस्तार विधि भी है:

static class ExtensionMethods
{
    public static Color ToColor(this uint argb)
    {
        return Color.FromArgb((byte)((argb & -16777216)>> 0x18),      
                              (byte)((argb & 0xff0000)>> 0x10),   
                              (byte)((argb & 0xff00) >> 8),
                              (byte)(argb & 0xff));
    }
}

उपयोग में:

Color color = 0xFFDFD991.ToColor();

6
शायद एक बेवकूफ सवाल है, और थोड़ी देर, लेकिन आप अल्फा वैल्यू के लिए -16777216 का उपयोग क्यों करते हैं?
गीकपेप

3
हेक्स का उपयोग करते हुए लगातार छोटे बदलाव: वापसी का रंग। स्ट्रोमबर्ग (बाइट) ((argb और 0xff000000) >> 0x18), (बाइट) ((argb और 0xff0000) >> 0x10), (बाइट) ((argb और 0xff00) >> 0x08), (बाइट) (argb और 0xff));
भी

1
यह कोड दोषपूर्ण है। मैं यह पता नहीं लगा सका कि कुछ भी क्यों नहीं दिख रहा था और यह पता चला क्योंकि यह कोड हेक्स को Colorठीक से परिवर्तित नहीं करता है। मैंने @too से कोड का उपयोग किया और उसने इसे ठीक किया।
ub3rst4r

यहाँ एक पिछला संस्करण है, इसलिए इसका उत्तर है: http://stackoverflow.com/a/784852/2721611
Mojtaba Rezaeian

1
आप & 0xFFहर बार अंतिम उतार चढ़ाव मूल्य पर कर सकते हैं , इसके बजाय उन सभी विभिन्न मूल्यों की आवश्यकता के &साथ।
Nyerguds

38

नीचे दिए गए तीन वेरिएंट बिल्कुल एक ही रंग देते हैं। अंतिम वाले को विजुअल स्टूडियो 2010 IDE में हाइलाइट होने का लाभ है (शायद यह ReSharper है जो इसे कर रहा है) उचित रंग के साथ।

var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE");

var cc2 = System.Drawing.Color.FromArgb(0x479DEE);

var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);

7
इनमें से कोई नहीं लौटा System.Windows.Media.Color
सिनत्र

14
    private Color FromHex(string hex)
    {
        if (hex.StartsWith("#"))
            hex = hex.Substring(1);

        if (hex.Length != 6) throw new Exception("Color not valid");

        return Color.FromArgb(
            int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
            int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
            int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber));
    }

2
UWP Color.FromArgb () में 4 बाइट तर्कों की आवश्यकता होती है। तो यह दिखेगा: Return Color.FromArgb (255, byte.Parse (hex.Substring (0, 2), System.Globalization.NumberStyles.HexNumber), byte.Parse (hex.Substring (2, 2), System)। वैश्वीकरण। NumberStyles.HexNumber), byte.Parse (hex.Substring (4, 2), System.Globalization.NumberStyles.HexNumber));
किबर्नेटिक

13

मुझे एक HEX रंग कोड को System.Drawing.Color में बदलने की आवश्यकता थी, विशेष रूप से एक WPF फॉर्म पर पृष्ठभूमि के रूप में ऐलिस ब्लू की एक छाया और पाया कि इसका उत्तर खोजने में अपेक्षा से अधिक समय लगा:

using System.Windows.Media;

-

System.Drawing.Color myColor = System.Drawing.ColorTranslator.FromHtml("#EFF3F7");
this.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(myColor.A, myColor.R, myColor.G, myColor.B));

11

आप निम्नलिखित कोड का उपयोग कर सकते हैं:

Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");

5

यदि आप इसे Windows स्टोर ऐप के साथ करना चाहते हैं, तो @Hans Kesting और @Jink उत्तर द्वारा:

    string colorcode = "#FFEEDDCC";
    int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
    tData.DefaultData = Color.FromArgb((byte)((argb & -16777216) >> 0x18),
                          (byte)((argb & 0xff0000) >> 0x10),
                          (byte)((argb & 0xff00) >> 8),
                          (byte)(argb & 0xff));

3

यह पोस्ट किसी भी हेक्स कलर कोड से सिस्टम रंग में बदलने की कोशिश करने वाले के लिए गोटो बन गया है। इसलिए, मैंने सोचा कि मैं एक व्यापक समाधान जोड़ूंगा जो 6 अंक (RGB) और 8 अंक (ARGB) हेक्स मान दोनों से संबंधित है।

Microsoft के अनुसार डिफ़ॉल्ट रूप से, जब RGB से ARGB मान में परिवर्तित होता है

अल्फा मान लगभग 255 (पूरी तरह से अपारदर्शी) है।

इसका मतलब एफएफ को 6 अंकों (आरजीबी) हेक्स रंग कोड से जोड़कर यह 8 अंकों का एआरजीबी हेक्स रंग कोड बन जाता है। इसलिए, एक सरल विधि बनाई जा सकती है जो एआरजीबी और आरजीबी हेक्स दोनों को संभालती है और उन्हें उपयुक्त रंग संरचना में परिवर्तित करती है।

    public static System.Drawing.Color GetColorFromHexValue(string hex)
    {
        string cleanHex = hex.Replace("0x", "").TrimStart('#');

        if (cleanHex.Length == 6)
        {
            //Affix fully opaque alpha hex value of FF (225)
            cleanHex = "FF" + cleanHex;
        }

        int argb;

        if (Int32.TryParse(cleanHex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out argb))
        {
            return System.Drawing.Color.FromArgb(argb);
        }

        //If method hasn't returned a color yet, then there's a problem
        throw new ArgumentException("Invalid Hex value. Hex must be either an ARGB (8 digits) or RGB (6 digits)");

    }

यह हंस केसिंग के उत्तर से प्रेरित था।



0

WPF:

using System.Windows.Media;

//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");

//color to hex
string hexcolor = color.ToString();

वास्तव में, कोई हेक्स नहीं है लेकिनColor [Indigo]
जॉर्ज लैंटेज़

0

उपयोग

System.Drawing.Color.FromArgb(myHashCode);

2
हेक्स स्ट्रिंग से रूपांतरण पर नज़र int?
थोरारीन

मूल रूप से प्रश्न "हैश कोड से रंग कैसे प्राप्त करें" के रूप में पूछा गया था, जिसने यहां बहुत भ्रम पैदा किया। ;-)
हर्जमेइस्टर

0

अगर आपका मतलब हैशकोड जैसा है .GetHashCode(), तो मुझे डर है कि आप वापस नहीं जा सकते। हैश फ़ंक्शन द्वि-दिशात्मक नहीं हैं, आप केवल 'आगे' जा सकते हैं, वापस नहीं।

यदि आपको रंग के हेक्साडेसिमल मान के आधार पर रंग प्राप्त करने की आवश्यकता है, तो Oded के सुझाव का पालन करें।


@ ओपी को प्रश्न स्पष्ट करने में मदद करने के लिए धन्यवाद। मैं कहूंगा कि इस उत्तर की अब आवश्यकता नहीं है, और इसे हटाने की सलाह देते हैं।
jpaugh

0

मैंने अपने प्रोजेक्ट में ColorDialog का उपयोग किया। ColorDialog कुछ समय पहले "Red", "Fhushia" और कभी-कभी "fff000" वापस आते हैं। मैंने इस समस्या को इस तरह हल किया कि शायद कोई मदद करे।

        SolidBrush guideLineColor;
        if (inputColor.Any(c => char.IsDigit(c)))
        {
            string colorcode = inputColor;
            int argbInputColor = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
             guideLineColor = new SolidBrush(Color.FromArgb(argbInputColor));

        }
        else
        {
            Color col = Color.FromName(inputColor);
             guideLineColor = new SolidBrush(col);
        }

ColorDialog से InputColor रिटर्न वैल्यू है।

इस सवाल का जवाब देने के लिए सभी को धन्यवाद। यह मेरे लिए बहुत बड़ी मदद है।

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