Bir RGB değeri verildiğinde 168, 0, 255
, rengin tonlarını (daha açık hale getirin) ve gölgelerini (daha koyu hale getirin) nasıl oluşturabilirim?
Bir RGB değeri verildiğinde 168, 0, 255
, rengin tonlarını (daha açık hale getirin) ve gölgelerini (daha koyu hale getirin) nasıl oluşturabilirim?
Yanıtlar:
Gölgelendirme ve renklendirme için çeşitli seçenekler arasında :
Gölgeler için, her bileşeni önceki değerinin 1/4, 1/2, 3/4 vb. İle çarpın. Faktör ne kadar küçükse gölge o kadar koyu olur.
Renk tonları için hesaplayın (255 - önceki değer), bunu 1/4, 1/2, 3/4, vb. İle çarpın (faktör ne kadar büyükse, renk tonu o kadar açık) ve bunu önceki değere ekleyin (her birinin .component, 8 bitlik bir tam sayıdır).
Renk işlemlerinin (renk tonları ve diğer gölgelendirme gibi) doğrusal RGB'de yapılması gerektiğini unutmayın . Bununla birlikte, belgelerde belirtilen veya görüntülerde ve videoda kodlanmış RGB renklerinin doğrusal RGB'de olması muhtemel değildir, bu durumda , RGB renk bileşenlerinin her birine sözde bir ters aktarım işlevinin uygulanması gerekir. Bu işlev, RGB renk alanına göre değişir. Örneğin, sRGB renk uzayında (RGB renk alanı bilinmiyorsa varsayılabilir), bu işlev kabaca her bir sRGB renk bileşenini (0'dan 1'e kadar) 2.2 kuvvetine yükseltmeye eşdeğerdir. ("Doğrusal RGB" nin bir RGB renk alanı olmadığını unutmayın.)
Ayrıca bkz. Violet Giraffe'ın "gama düzeltmesi" hakkındaki yorumu.
Renk Modelinize bağlı olarak, daha koyu (gölgeli) veya daha açık (renkli) bir renk oluşturmanın farklı yöntemleri vardır:
RGB
:
Gölgelendirmek için:
newR = currentR * (1 - shade_factor)
newG = currentG * (1 - shade_factor)
newB = currentB * (1 - shade_factor)
Renk tonu vermek için:
newR = currentR + (255 - currentR) * tint_factor
newG = currentG + (255 - currentG) * tint_factor
newB = currentB + (255 - currentB) * tint_factor
Daha genel olarak, bir rengi bir renkle katmanlamayla sonuçlanan RGB(currentR,currentG,currentB)
renk RGBA(aR,aG,aB,alpha)
şudur:
newR = currentR + (aR - currentR) * alpha
newG = currentG + (aG - currentG) * alpha
newB = currentB + (aB - currentB) * alpha
(aR,aG,aB) = black = (0,0,0)
gölgeleme ve (aR,aG,aB) = white = (255,255,255)
renklendirme için nerede
HSV
veya HSB
:
Value
/ Brightness
veya artırınSaturation
Saturation
veya Value
/Brightness
HSL
:
Lightness
Lightness
Bir renk modelinden diğerine dönüştürmek için formüller vardır. İlk sorunuza göre, örneğin içindeyseniz RGB
ve HSV
modeli gölgelendirmek için kullanmak istiyorsanız, sadece dönüştürebilir HSV
, gölgelendirme yapabilir ve geri dönüştürebilirsiniz RGB
. Dönüştürülecek formül önemsiz değildir, ancak internette bulunabilir. Dilinize bağlı olarak, temel bir işlev olarak da mevcut olabilir:
RGB
uygulaması gerçekten basit olma avantajına sahiptir, ancak:
HSV
veya HSB
biraz karmaşıktır çünkü istediğinizi elde etmek için iki parametreyle oynamanız gerekir ( Saturation
& Value
/ Brightness
)HSL
benim açımdan en iyisi:
50%
değiştirilmemiş bir Ton anlamına gelir>50%
Tonun daha açık olduğu anlamına gelir (ton)<50%
Tonun daha koyu olduğu anlamına gelir (gölge)Lightness
parçayı değiştirerek )Şu anda tuval ve piksellerle deneyler yapıyorum ... Bu mantığın benim için daha iyi çalıştığını görüyorum.
'ton' değerini dengelemek için ekleyin
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;
ya da böyle bir şey...
rs = r * 0.25
,gs = g * 0.25
,bs = b * 0.25
(bu çok koyu renk olan); Tonlama (oda sıcaklığı, gt, bt):rt = r + (0.25 * (255 - r))
,gt = g + (0.25 * (255 - g))
,bt = b + (0.25 * (255 - b))
(yani, bir çok ışık renk olan). Bunu birçok renk tonu yaratan harika bir dizinin parçası olarak yaptım ve harika çalıştı. Umarım yardımcı olur. Teşekkürler Peter.