2009-09-29 12 views
9

होना चाहिए मेरे पास 60% अपारदर्शी रूप है। और जब उपयोगकर्ता फॉर्म के रंग को बदलता है, कभी-कभी (चुने हुए रंग के आधार पर), वे अब फॉर्म पर टेक्स्ट नहीं देख सकते हैं क्योंकि यह फ़ॉर्म के रंग जैसा दिखता है। इसलिए, मैं यह देखने के लिए एक if/switch करने की कोशिश कर रहा हूं कि फ़ॉर्म का चयनित बैककॉलर या तो डार्क या लाइट है या नहीं। यदि यह अंधेरा है, तो फॉर्म पर सभी पाठ सफेद होना चाहिए। यदि यह प्रकाश है, तो फॉर्म पर सभी पाठ काले होना चाहिए।यदि फॉर्म अंधेरा है, तो फॉर्म पर टेक्स्ट लाइट

क्या यह सब संभव है? मैंने इसे सब जगह पर देखा है लेकिन यह सुनिश्चित नहीं है कि खोज क्षेत्र में पूरा प्रश्न लिखने के बिना क्या खोजना है।

किसी भी मदद/सुझावों की बहुत सराहना की जाएगी।

धन्यवाद, जेसन।

+0

वहाँ एक और समाधान [यहां] है (http://stackoverflow.com/a/2509596/779408) – breceivemail

उत्तर

7

आप की जांच कर सकता है, तो तीन rgb-मानों का योग अधिकतम-मूल्य के आधे से ऊपर हैं

-> क्योंकि 255,255,255 == सफेद (प्रकाश) और 0,0,0 == काला (अंधेरा) :

fe

R 255 
G 140 
B 170 
===== 
    565 

मैक्स: 765 (मध्य 382) सम: 565

क्योंकि योग 565 है और मध्यम (अंधेरे प्रकाश) से ऊपर, रंग हल्का है। तो आप टेक्स्ट रंग को अंधेरे में बदल सकते हैं।

+0

धन्यवाद @ लिचमबर्ग, मैं मूल रूप से इस बारे में सोच रहा था लेकिन फिर खुद को यह समझाने में कामयाब रहा कि यह काम नहीं करेगा। लेकिन यह बहुत सराहना करता है। –

+1

इससे पीले रंग का अंधेरा हो जाएगा (255, 255, 0)। –

+0

आप सही हैं ... – Lichtamberg

18

Color.GetBrightness() का उपयोग करने के तरीके के बारे में यह जानने के लिए कि यह कितना हल्का है?

+0

धन्यवाद @Jon । बहुत सराहना की। :) –

3

इस विधि जाँच करता है कि दो रंगों के विपरीत पढ़ी जा सकती है:

public static bool ContrastReadableIs(Color color_1, Color color_2) 
{ 
    // Maximum contrast would be a value of "1.0f" which is the brightness 
    // difference between "Color.Black" and "Color.White" 
    float minContrast = 0.5f; 

    float brightness_1 = color_1.GetBrightness(); 
    float brightness_2 = color_2.GetBrightness(); 

    // Contrast readable? 
    return (Math.Abs(brightness_1 - brightness_2) >= minContrast); 
} 

एक backcolor एक पठनीय ForeColor की तलाश हो रही है?
Here बैककलर को घुमाने के लिए एक सरल और काफी अच्छा तरीका है।
एनबी: यह उलटा मतलब यह नहीं है कि रंग और उलटा रंग चमक में भिन्न होता है, लेकिन अगर दो रंग कम से कम 0.5 में भिन्न होते हैं तो वे आम तौर पर एक पठनीय विपरीत दिखाते हैं। क्लिक हैंडलर के लिए

Button with text "Am I readable?"

टेस्ट कोड Button1

Random r = new Random(); 

while (1 < 2) 
{ 
    // Get a random fore- and backcolor 
    Color foreColor = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256)); 
    Color backColor = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256)); 

    // Contrast readable? 
    if (ContrastReadableIs(foreColor, backColor)) 
    { 
     button1.ForeColor = foreColor; 
     button1.BackColor = backColor; 
     System.Media.SystemSounds.Beep.Play(); 
     break; 
    } 
} 
संबंधित मुद्दे