その最初の質問をしたのは私でした。それ以来、私はそれを理解しました。単一の色変換 ( satMod
、redMod
、lumMod
など) では、値を sRGB 0,0,0 または 255,255,255 (または 1.0,1.0,1.0) 内にクランプする必要があります。つまり、satMod
色を 300% 変更した結果、色の値が 255 を超えた場合は、255 (または 1.0) に固定します。その結果の色を使用して、他の色変換が自分の色srgbClr
または他の色空間にある場合は、それらを適用できます。
これは、あなたのような例で私が行うことです。
色を HSL 空間に変換します (これらの種類の RGB->HSL ルーチンは、ルックアップで Bing/Google で一般的です)。
satMod
その色とを次のようなルーチンに送信します。
Public Sub modulateHSL(ByVal c As HSL, ByVal val As System.Double)
Select Case c
Case HSL.Hue
Hue = Hue * val
If Hue = 0.0 Then
If val >= 1.0 Then
Hue = val - Fix(val)
End If
Else
Hue = Hue - Fix(Hue)
End If
Case HSL.Saturation
Saturation = Saturation * val
Case HSL.Luminance
Luminance = Luminance * val
End Select
HSL_To_sRGB(Hue, Saturation, Luminance)
Clamp_sARGB()
End Sub
このルーチンの最後に、1)HSL_To_sRGB(Hue, Saturation, Luminance)
と 2) の2 つの呼び出しがあることに気付くでしょうClamp_sARGB()
。1 つ目は sRGB 空間に変換し、2 つ目は次のように RGB 値をクランプします。
Public Sub Clamp_sARGB()
If Red <= 0.0 Then Red = 0.0 Else If Red >= 1.0 Then Red = 1.0
If Green <= 0.0 Then Green = 0.0 Else If Green >= 1.0 Then Green = 1.0
If Blue <= 0.0 Then Blue = 0.0 Else If Blue >= 1.0 Then Blue = 1.0
If Alpha <= 0.0 Then Alpha = 0.0 Else If Alpha >= 1.0 Then Alpha = 1.0
sRGB_To_HSL(Red, Green, Blue)
End Sub
彩度のみを変更する場合は、リニア RGB を使用する必要がないことに注意してください。私は RBG と HSL の両方のスペースをクラス レベル フィールド (RGB は 0 から 1 のスペース) に保持しているため sRGB_To_HSL(Red, Green, Blue)
、そのルーチンの最後に表示されます。
これは、PowerPoint に表示される DrawingML 用です。Excel は異なる場合があります (グラフを扱った長いスレッドがここにあり、回答もある可能性があります)。ルーチンのコーディング方法によっては、彩度を変更すると輝度も変更される可能性があることに注意してください。その場合は、HSL から RGB に戻すときに元の輝度を使用する必要があります。
これがどれもうまくいかない場合は
、何が起こっているのか、何を期待しているのかなど、サンプルの XLSX をDropBoxポイントのどこかに置くことができますか?