2014-07-14 17 views
10

Anladığım kadarıyla, HSL and HSB colour spaces çok benzer, her ikisi de aynı 0-360 renk tekerleğini renk tonu ve doygunluk için aynı 0-1 değerini kullanır. Aralarındaki tek fark, HSB modelinde, 0'ın siyah ve 1'inin tam yoğunlukta renk olduğu parlaklık derecesine sahip olmanızdır. HSL'de ise, 0'ın hala siyah fakat 1'inin beyaz olduğu hafiflik/parlaklık vardır..Net Color yapısında bir HSB veya HSL renk alanı kullanılıyor mu?

.net Color yapı RGB alanını kullanır ama GetHue(), GetSaturation() ve GetBrightness() işleve sahiptir.

Buradaki belgeler kafa karıştırıcıdır. GetBrightness() için:

/// <summary>Gets the hue-saturation-brightness (HSB) brightness value for this 
/// System.Drawing.Color structure.</summary> 

Ok, bu nedenle mantıklı, .Net ziyade parlak renginden daha,

/// <returns>The brightness of this System.Drawing.Color. The brightness ranges 
/// from 0.0 through 1.0, where 0.0 represents black and 1.0 represents white. 
/// </returns> 

Er ... yani maksimum değer beyaz temsil ... HSB kullandığı görülüyor. Belgelerinin ve adlarının sürekli olarak parlaklık anlamına gelmesine rağmen, döndürülen değerin aslında hafiflik/parlaklık olduğundan emin olabilirsiniz, örn. Net aslında HSL modelini değil HSB modelini kullanır.

Bunu doğrulayan var mı? Belgelerdeki bir hata mı, GetBrightness() numaralı hata mı, yoksa bir şekilde teori yanlış mı anladım?

cevap

6

Bağlandığınız sayfa, çeşitli renkler için L ve V (aka B) örnekleri verir. Örneklere Color.FromArgb(255, 255, 0, 0).GetBrightness (0.5) sonucunun karşılaştırılması, .NET'in HSL modelini kullandığını göstermektedir. Color.FromArgb(255, 128, 255, 255).GetSaturation (1.0) 'un bir kontrolü bunu onaylar.

Diğerleri de aynı şeyi keşfettiler, örn. Converting from HSB to RGB in .NET'daki Chris Jackson (MSFT): "Temel sorun, .NET Framework'ün aslında HSL olsa bile HSB olarak renk uzayını ifade etmesidir. (Renk seçici denetimi buna doğru bir şekilde başvurur.) Çerçeve içindeki Renk yapısı Bu Renk yapısı için "Ton doygunluk-parlaklık (HSB) parlaklık değerini alır." gibi bir belgede açıklanan bir GetBrightness() yöntemi sağlar. "Bu yanlış mı? Bahse girer. GetLuminance() çağrılmalıdır."

İlgili konular