2017-09-12 17 views
1

HSLからアルゴリズムをwikipediaに読みました。私はそれを理解し、それを使って変換することができます。しかし、私は別のアルゴリズムhereに来て、数学は "説明" hereです。HSLからRGBへの色空間変換アルゴリズムを理解する

アルゴリズムは次のとおりです。私は数学、以下試してみたが、私はそれを理解することはできません

//H, S and L input range = 0 ÷ 1.0 
//R, G and B output range = 0 ÷ 255 

if (S == 0) 
{ 

    R = L * 255 
    G = L * 255 
    B = L * 255 
} 
else 
{ 
    if (L < 0.5) var_2 = L * (1 + S) 
    else   var_2 = (L + S) - (S * L) 

    var_1 = 2 * L - var_2 

    R = 255 * Hue_2_RGB(var_1, var_2, H + (1/3)) 
    G = 255 * Hue_2_RGB(var_1, var_2, H) 
    B = 255 * Hue_2_RGB(var_1, var_2, H - (1/3)) 
} 

Hue_2_RGB(v1, v2, vH)    //Function Hue_2_RGB 
{ 
    if (vH < 0) vH += 1 
    if(vH > 1) vH -= 1 
    if ((6 * vH) < 1) return (v1 + (v2 - v1) * 6 * vH) 
    if ((2 * vH) < 1) return (v2) 
    if ((3 * vH) < 2) return (v1 + (v2 - v1) * ((2/3) - vH) * 6) 
    return (v1) 
} 

。どのように機能するのですか?

+0

円筒座標系からデカルト座標への変換です。彩度と輝度(色に依存しない)を組み込んだヘルプ変数 'var_1'と' var_2'を作成します。次に、それらを色相に応じてRGB空間の色値に変換します。 – igrinis

答えて

1

最初の部分if (S == 0)は、彩度がない場合は灰色の陰影を意味します。輝度を設定し、RGBをそのグレースケールレベルに設定すると、完了です。

そうでない場合は、我々はトリッキーな部分を実行する必要があります。

我々は唯一のコードをより読みやすくするために、一時的な値としてvar_1var_2を使用しなければなりません。

したがって、輝度が0.5(50%)より小さい場合は、var_2 =輝度x(1.0 +彩度。 )輝度が0.5以上(50%)の場合、var_2 =輝度+彩度 - 輝度x彩度。それは他の部分です:

if (L < 0.5) var_2 = L * (1 + S) 
else   var_2 = (L + S) - (S * L) 

その後、我々は実行します。後で有用であることが起こっている

var1 = 2 x Luminance – var_2 

今、私たちは別のTHRを必要としています。色相が考慮されている限り、各カラーチャンネルの一時的な変数です。赤については、0.333を加えます(H + (1/3)).Greenの場合は何もしません.Blueの場合は、0.333を減算します(H + (1/3))。この一時的な値はにvH(値Hue)と呼ばれます。

ここで、各カラーチャネルは個別に処理されるため、3つの関数呼び出しがあります。カラーチャンネルには4つの式を適用できます。すべてのカラーチャネルは、1つの数式だけを「使用する」必要があります。

どちらですか?これは色相(vH)の値に依存します。

ちなみに、vHの値は正規化する必要があります。したがって、負の場合は1を追加し、1より大きい場合は1を減算して、vHが[0、1]になるようにします。

  1. 6×VHが1より小さい場合、カラーチャネル= VAR_1 +(VAR_2 - VAR_1)×6×のvH
  2. 場合2×VHが1より小さい場合、カラーチャネル= VAR_2
  3. 場合3×VHが2より小さい場合、カラーチャネル= VAR_1 +(VAR_2 - VAR_1) X(0.666 - Vhは)それ以外
  4. 6をX、カラーチャンネル= VAR_1

R = 255 * Hue_2_RGB(var_1, var_2, H + (1/3))、カラーチャンネルであろう赤い、 コードにはRという名前が付けられています。

+1

私はアルゴリズムの仕組みを理解していますが、アルゴリズムが数式からどのように形成されたのか分かりません。私はそれに取り組んだ後、今でも理解しています。ありがとう! – userx01

関連する問題