回答:
シェーディングとティントのいくつかのオプションの中で:
シェードの場合は、各コンポーネントに前の値の1 / 4、1 / 2、3 / 4などを掛けます。係数が小さいほど、色合いは暗くなります。
濃淡については、(255-以前の値)を計算し、その値に1 / 4、1 / 2、3 / 4などを掛けて(係数が大きいほど、色合いが明るくなります)、それを以前の値に追加します(それぞれを想定) .componentは8ビット整数です)。
色の操作(ティントやその他のシェーディングなど)は線形RGBで行う必要があることに注意してください。ただし、ドキュメントで指定された、または画像やビデオでエンコードされたRGBカラーは、線形RGBである可能性は低く、その場合、いわゆる逆伝達関数を RGBカラーの各コンポーネントに適用する必要があります。この関数は、RGB色空間によって異なります。たとえば、sRGBカラースペース(RGBカラースペースが不明の場合に想定される)では、この関数は各sRGBカラーコンポーネント(0から1の範囲)を2.2の累乗に上げるのとほぼ同じです。(「線形RGB」はRGB色空間ではないことに注意してください。)
「ガンマ補正」に関するViolet Giraffeのコメントも参照してください。
お使いのカラーモデルに応じて、より暗い(網掛け)またはより明るい(色合い)色を作成する方法はいくつかあります。
RGB
:
シェーディングするには:
newR = currentR * (1 - shade_factor)
newG = currentG * (1 - shade_factor)
newB = currentB * (1 - shade_factor)
色合いを付けるには:
newR = currentR + (255 - currentR) * tint_factor
newG = currentG + (255 - currentG) * tint_factor
newB = currentB + (255 - currentB) * tint_factor
より一般的には、色RGB(currentR,currentG,currentB)
と色を重ね合わせる結果の色RGBA(aR,aG,aB,alpha)
は次のとおりです。
newR = currentR + (aR - currentR) * alpha
newG = currentG + (aG - currentG) * alpha
newB = currentB + (aB - currentB) * alpha
どこ(aR,aG,aB) = black = (0,0,0)
シェーディングのため、および(aR,aG,aB) = white = (255,255,255)
着色のために
HSV
またはHSB
:
Value
/を下げるか、Brightness
またはSaturation
Saturation
か、Value
/Brightness
HSL
:
Lightness
Lightness
あるカラーモデルから別のカラーモデルに変換する数式が存在します。最初の質問のとおり、たとえば、モデルをRGB
使用してシェーディングHSV
するHSV
場合は、に変換し、シェーディングを実行して、に戻すことができRGB
ます。変換する式は簡単ではありませんが、インターネットで見つけることができます。言語によっては、コア関数として使用できる場合もあります。
RGB
実装が本当に簡単であるという利点がありますが、
HSV
または、HSB
必要なものを取得するために2つのパラメーターを使用する必要があるため、複雑なものになります(Saturation
&Value
/ Brightness
)HSL
私の観点からは最高です:
50%
変更されていない色相を意味します>50%
色相が明るい(色合い)ことを意味します<50%
色相が暗い(濃い)ことを意味しますLightness
パーツを交換するだけで)比較的または絶対的に色を濃くしたり濃淡を付けたりできます現在、キャンバスとピクセルを実験しています...このロジックがうまく機能していることがわかりました。
「色合い」値をオフセットするために追加
var grey = (r + g + b) / 3;
var grey2 = (new_r + new_g + new_b) / 3;
var dr = grey - grey2 * 1;
var dg = grey - grey2 * 1
var db = grey - grey2 * 1;
tint_r = new_r + dr;
tint_g = new_g + dg;
tint_b = new_b _ db;
またはそのようなもの...
rs = r * 0.25
、gs = g * 0.25
(bs = b * 0.25
これはかなり暗いシェードです)。色合い(RT、GT、BT) 、rt = r + (0.25 * (255 - r))
、gt = g + (0.25 * (255 - g))
(bt = b + (0.25 * (255 - b))
これはかなり軽い色合いです)。多くの色相を作成するクールな配列の一部としてそれを行い、それはうまくいきました。お役に立てば幸いです。ピーターに感謝します。