2009-09-29 11 views
9

ben% 60 Opak formu var. Ve kullanıcı formun rengini değiştirdiğinde, bazen (seçilen renge bağlı olarak), formdaki metni göremezler çünkü formun rengine çok benzer. Yani, formun seçilen BackColor'un ya Karanlık ya da Açık olup olmadığını görmek için bir if/switch'i yapmaya çalışıyorum. Karanlık ise, formdaki tüm metinler Beyaz olmalıdır. Işık ise, formdaki tüm metinler Siyah olmalıdır.ise form üzerinde daha sonra Metin Işık olmalıdır

Bu mümkün mü? Bunu her yerde görmüştüm ama arama alanında bütün soruyu yazmadan ne arayacağımı bilmiyorum.

Herhangi bir yardım/öneri büyük takdir.

Teşekkürler, jason.

+0

başka bir çözüm [buradan] vardır (http://stackoverflow.com/a/2509596/779408) – breceivemail

cevap

7

üç rgb-değerlerinin toplamı max-değerin yarısı üzerinde iseniz, kontrol edebilir

-> çünkü 255255255 == beyaz (ışık) ve 0,0,0 == siyah (karanlık) :

fe

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

Max: 765 (Orta 382) Toplam: toplamı 565 olup (ışık karanlık) ortada üstünde, renk ışıktır 565

çünkü. Böylece, metin rengini koyu olarak değiştirebilirsiniz. iki renk kontrast okunabilir olup olmadığını

+0

Teşekkür ederim @Lichtamberg, Aslında bunu düşünüyordum ama sonra işe yaramayacağına kendimi ikna etmeyi başardım. Ama çok takdir ediyor. –

+1

Bu, sarı rengi koyulaştırır (255, 255, 0). –

+0

haklısın ... – Lichtamberg

18

Ne kadar hafif olduğunu öğrenmek için Color.GetBrightness()'u kullanmaya ne dersiniz?

+0

teşekkür ederiz @Jon . Çok takdir edildi. :) –

3

Bu yöntem denetler:

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

okunabilir ForeColor arayan bir backcolor yaşıyorsunuz?
Here arka rengi ters çevirmek için basit ve oldukça iyi bir yaklaşımdır.
NB: Bu işlem, renk ve ters çevrilmiş rengin parlaklık bakımından farklı olduğu anlamına gelmez, ancak iki renk parlaklıkta en az 0.5 farklılık gösteriyorsa, genellikle okunabilir bir karşıtlık gösterir.

Button with text "Am I readable?"

Test tıklaması işleyicisi için kod 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; 
    } 
}