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




wpf colors (10)

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

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


WPF:

using System.Windows.Media;

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

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


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

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

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

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

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

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

यदि, हालांकि आप एक एआरजीबी हेक्स कोड का उपयोग कर रहे हैं, तो आप SystemCindows.Media नामस्थान से ColorConverter क्लास का उपयोग कर सकते हैं:

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

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

using System.Windows.Media;

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

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

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

कलरकोड केवल एआरजीबी मूल्य का हेक्साडेसिमल प्रतिनिधित्व है।


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

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


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

डिफ़ॉल्ट रूप से, माइक्रोसॉफ्ट के अनुसार, आरजीबी से एआरजीबी मूल्य में कनवर्ट करते समय

अल्फा मूल्य पूरी तरह से 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)");

    }

यह हंस केस्टिंग के जवाब से प्रेरित था।


    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));
    }

System.Drawing.Color.FromArgb(myHashCode);

?








hex