2014-07-14 14 views
10

Jak rozumiem, HSL and HSB colour spaces są bardzo podobne, obie używają tego samego koła kolorów 0-360 dla odcienia i tej samej wartości 0-1 dla nasycenia. Jedną z różnic między nimi jest to, że w modelu HSB masz jasność, gdzie 0 jest czarne, a 1 jest kolorem przy pełnej intensywności, podczas gdy w HSL masz jasność/jasność, gdzie 0 jest wciąż czarne, a 1 jest białe.Czy struktura .Net Color używa przestrzeni kolorów HSB lub HSL?

.NET Color struct korzysta z przestrzeni RGB, ale ma GetHue(), GetSaturation() i GetBrightness() funkcje.

Dokumentacja tutaj jest myląca. Dla GetBrightness():

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

Ok, więc sensowne, wydaje się być za pomocą Net HSB ...

/// <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 ... więc wartość max reprezentuje białe, zamiast najjaśniejszego koloru. Pomimo faktu, że ich dokumenty i nazwy konsekwentnie odnoszą się do jasności jestem prawie pewien, że zwrócona wartość jest w rzeczywistości jasność/luminancja, tj. .Net faktycznie używa modelu HSL, a nie HSB.

Czy ktoś może to potwierdzić? Czy jest to błąd w dokumentacji, błąd w GetBrightness(), czy też w jakiś sposób nie rozumiem tej teorii?

Odpowiedz

6

Strona, z którą się łączysz, podaje przykłady L i V (aka B) dla różnych kolorów. Porównanie wyniku z Color.FromArgb(255, 255, 0, 0).GetBrightness (0,5) do przykładów pokazuje, że .NET używa modelu HSL. Sprawdza je Color.FromArgb(255, 128, 255, 255).GetSaturation (1.0).

Inni odkryli to samo, np. Chris Jackson (MSFT) w Converting from HSB to RGB in .NET: "Podstawową kwestią jest to, że .NET Framework odnosi się do przestrzeni kolorów jako HSB, mimo że faktycznie jest HSL. (Kontrola wyboru koloru odnosi się do niego poprawnie.) Struktura koloru w strukturze dostarcza metodę GetBrightness(), opisaną w dokumentacji jako "Pobiera wartość jasności nasycenia-jasności (HSB) dla tej struktury koloru." Czy to źle? Zakład, powinien on nazywać się GetLuminance(). "

Powiązane problemy