2012-07-31 16 views
7

मुझे पता है कि हेक्स वैल्यू का उपयोग करके पूर्वनिर्धारित रंगों का नाम कैसे प्राप्त करें, लेकिन अपने हेक्स वैल्यूएटो को निकटतम ज्ञात रंग का अनुमान लगाते समय रंग का नाम कैसे प्राप्त करें।हेक्स वैल्यू के माध्यम से रंग का नाम प्राप्त करना?

उत्तर

2

https://stackoverflow.com/a/7792104/224370 बताता है कि नामित रंग को सटीक आरजीबी मूल्य से कैसे मिलान किया जाए। इसे अनुमानित करने के लिए आपको किसी प्रकार की दूरी की फ़ंक्शन की आवश्यकता होती है जहां आप गणना करते हैं कि रंग कितने दूर हैं। आरजीबी स्पेस में ऐसा करना (आर, जी और बी मानों में मतभेदों के वर्गों का योग) आपको एक सही उत्तर देने वाला नहीं है (लेकिन यह काफी अच्छा हो सकता है)। उदाहरण के लिए https://stackoverflow.com/a/7792111/224370 देखें जो इस तरह से करता है। अधिक सटीक उत्तर प्राप्त करने के लिए आपको एचएसएल में परिवर्तित करने की आवश्यकता हो सकती है और फिर तुलना करें।

5

इयान के सुझाव पर आधारित कुछ कोड यहां दिया गया है। मैंने इसे कई रंग मूल्यों पर परीक्षण किया, ऐसा लगता है कि यह अच्छी तरह से काम करता है।

GetApproximateColorName(ColorTranslator.FromHtml(source)) 

private static readonly IEnumerable<PropertyInfo> _colorProperties = 
      typeof(Color) 
      .GetProperties(BindingFlags.Public | BindingFlags.Static) 
      .Where(p => p.PropertyType == typeof (Color)); 

static string GetApproximateColorName(Color color) 
{ 
    int minDistance = int.MaxValue; 
    string minColor = Color.Black.Name; 

    foreach (var colorProperty in _colorProperties) 
    { 
     var colorPropertyValue = (Color)colorProperty.GetValue(null, null); 
     if (colorPropertyValue.R == color.R 
       && colorPropertyValue.G == color.G 
       && colorPropertyValue.B == color.B) 
     { 
      return colorPropertyValue.Name; 
     } 

     int distance = Math.Abs(colorPropertyValue.R - color.R) + 
         Math.Abs(colorPropertyValue.G - color.G) + 
         Math.Abs(colorPropertyValue.B - color.B); 

     if (distance < minDistance) 
     { 
      minDistance = distance; 
      minColor = colorPropertyValue.Name; 
     } 
    } 

    return minColor; 
} 
+0

धन्यवाद आप मुह कर्तन ... :) – fresky

संबंधित मुद्दे