के लिए फ़ॉन्ट रंग के आधार पर पृष्ठभूमि रंग कैसे चुनें, मुझे रंग संरचना के बारे में बहुत कुछ पता नहीं है, इसलिए मैं इस एल्गोरिदम के साथ आया जो परीक्षण पर फ़ॉन्ट रंग के आधार पर पृष्ठभूमि रंग उठाएगा आधार:उचित रंग
public class BackgroundFromForegroundColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is Color))
return value;
Color color = (Color)value;
if (color.R + color.G + color.B > 550)
return new SolidColorBrush(Colors.Gray);
else if (color.R + color.G + color.B > 400)
return new SolidColorBrush(Colors.LightGray);
else
return new SolidColorBrush(Colors.White);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
मैं कुछ इस बारे में googling किया था, लेकिन मैं अलग अलग तरीकों से एक पृष्ठभूमि रंग फ़ॉन्ट रंग के साथ एक अच्छा विपरीत असर पाने के लिए गणना की जा सकती के बारे में बहुत औपचारिक कुछ भी नहीं मिला है।
तो मेरा सवाल यह है: क्या एक अच्छा विपरीत पाने के लिए एक अच्छी पृष्ठभूमि लेने के लिए एक और "औपचारिक" दृष्टिकोण है? वैकल्पिक रूप से, आप अपना टेक्स्ट रंग जितना संभव हो उतना पठनीय जितना संभव हो उतना पाठ रखने के एकमात्र इरादे से पृष्ठभूमि रंग चुनने को कैसे संभालेंगे?
त्वरित अद्यतन
थोड़ा अधिक संदर्भ: मैं बस (उदाहरण के लिए "जल्दी भूरी लोमड़ी आलसी कुत्ते पर कूदता है") कुछ पाठ के एक पूर्वावलोकन जहां उपयोगकर्ता उठाता फ़ॉन्ट रंग दिखाने के लिए कोशिश कर रहा हूँ , वजन, फ़ॉन्ट इत्यादि। हालांकि मुझे यह देखने में दिलचस्पी है कि क्या किया जा सकता है, चाहे वह बहुत आसान हो या अधिक जटिल हो।
अंतिम संपादित
मैं H.B.
क्या सुझाव के साथ जाने का फैसला किया: यह सभी रंग मैं अपने पिछले एल्गोरिथ्म के साथ विपरीत कोशिश की अग्रभूमि हमेशा पृष्ठभूमि के साथ ठीक से विपरीत नहीं होता के साथ ठीक से काम करने लगता है। मैं यह देखने के लिए उत्सुक था कि क्या सूत्र है जो आपको किसी दिए गए अग्रभूमि के लिए "इष्टतम" पृष्ठभूमि देता है, लेकिन मुझे काले/सफेद कामों की आवश्यकता के लिए बस ठीक है। यह मेरा कोड वर्तमान स्वरूप में है:
public class BackgroundFromForegroundColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is Color))
return value;
Color color = (Color)value;
double Y = 0.2126 * color.ScR + 0.7152 * color.ScG + 0.0722 * color.ScB;
return Y > 0.4 ? Brushes.Black : Brushes.White;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
इसी तरह की जमीन यहां शामिल है: [पृष्ठभूमि के आधार पर अग्रभूमि रंग काला या सफेद बनाएं] (http://stackoverflow.com/questions/2241447/make-foregroundcolor-black-or-white-depending-on-background), [अच्छा किसी दिए गए पृष्ठभूमि रंग के लिए पाठ अग्रभूमि रंग] (http://stackoverflow.com/questions/946544/good-text-foreground-color-for-a-given-background-color) और [सी # के लिए आपके पसंदीदा एक्सटेंशन विधियां क्या हैं ?] (http://stackoverflow.com/questions/271398/what-are-your-favorite-extension-methods-for-c-codeplex-com-extensionoverflow/6031710#6031710) – takrl
एक साइड नोट के रूप में, 'कनवर्टबैक 'एक तरफ कनवर्टर्स को' NotSupportedException' फेंकना चाहिए क्योंकि कोई कार्यान्वयन नहीं होगा। –