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
HSVveya HSB:
Value/ Brightnessveya artırınSaturationSaturationveya Value/BrightnessHSL:
LightnessLightnessBir renk modelinden diğerine dönüştürmek için formüller vardır. İlk sorunuza göre, örneğin içindeyseniz RGBve HSVmodeli 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:
HSVveya HSBbiraz 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)Lightnessparç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.