Answers:
在阴影和着色的几种选择中:
对于阴影,将每个分量乘以其先前值的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
有点复杂,因为您需要使用两个参数来获得所需的内容(Saturation
&Value
/ Brightness
)HSL
从我的角度来看,这是最好的:
50%
表示不变的色调>50%
表示色调较浅(色调)<50%
表示色相较暗(阴影)Lightness
零件即可)我目前正在尝试使用画布和像素...我发现这种逻辑对我来说更好。
添加以抵消“ tint”值
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
这是一个漂亮的深色阴影); 色调(室温,GT,BT): ,rt = r + (0.25 * (255 - r))
,gt = g + (0.25 * (255 - g))
(bt = b + (0.25 * (255 - b))
即是一个相当轻色调)。我将其作为酷炫阵列的一部分进行了处理,它创造了许多色调,并且效果很好。希望有帮助。谢谢彼得。