10

私が理解しているように、HSL と HSB の色空間は非常に似ており、どちらも色相に同じ 0 ~ 360 のカラー ホイールを使用し、彩度に同じ 0 ~ 1 の値を使用します。それらの違いの 1 つは、HSB モデルでは輝度があり、0 が黒で 1 が最大強度の色であるのに対し、HSL では明度/輝度があり、0 は黒のままですが 1 は白です。

.netColor構造体は RGB 空間を使用しますがGetHue()、関数GetSaturation()GetBrightness()関数があります。

ここのドキュメントは紛らわしいです。の場合GetBrightness():

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

わかりました.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>

ええと...つまり、最大値は最も明るい色ではなく、白を表します。ドキュメントと命名は一貫して明るさを参照しているという事実にもかかわらず、返される値は実際にはlightness/luminosityであると確信しています。つまり、.Net は実際には HSB ではなく HSL モデルを使用しています。

誰でもこれを確認できますか?ドキュメントのエラーですか、エラーGetBrightness()ですか、それとも理論を誤解していますか?

4

1 に答える 1

6

リンク先のページには、さまざまな色の L と V (別名 B) の例が示されています。Color.FromArgb(255, 255, 0, 0).GetBrightness(0.5)の結果を例と比較すると、 .NET が HSL モデルを使用していることがわかります。Color.FromArgb(255, 128, 255, 255).GetSaturation(1.0)のチェックで確認できます。

.NETでの HSB から RGB への変換の Chris Jackson (MSFT) など、他の人も同じことを発見しました。ピッカー コントロールはそれを正しく参照します。)フレームワークの Color 構造体は、GetBrightness() メソッドを提供し、ドキュメントでは「この Color 構造体の色相、彩度、明るさ (HSB) の明るさの値を取得します。」と説明されています。これは間違っていますか?きっと、それは GetLuminance() と呼ばれるべきです。」

于 2014-07-14T09:36:10.733 に答える