我只是想得到一个rgb-colour的rgba值(#ebfcff)。rgb-colour是在白色背景上的rgba值。(a代表alpha)因此:搜索颜色+ #ffffff = #ebfcff在我看来,解决办法是从#ebfcff中减去白色,但如何减去颜色呢?我已经找到了一个合适的解决方案。有人知道如何从一个给定的RGB颜色中减去白色来得到一个新的颜色吗?这个新的颜色是rgba格式的,当它与白色重叠时,它等于给定的颜色。
disho6za1#
颜色值不只是相加。当您在颜色Y上绘制颜色X时,结果颜色C的每个颜色通道的值由下式给出:
Y
X
C
C = X * a + Y * (1-a)
使用浮点表示(每个通道是从0到1的值);其中a是X的alpha通道(很容易转换回0-255)。在白色背景上,所有通道的Y均为1,因此:
a
C = X * a + (1-a)
因此,如果a为0,显然找不到X,这是有道理的:如果颜色是完全透明的,则对合成颜色没有影响。同样,如果颜色是白色(X =1)(在白色背景上),则无法确定alpha(无论alpha如何,组合颜色都将是白色)。此外,如果不知道X或a,则无法找到另一个。如果你知道颜色的阿尔法(a),那么您就可以确定(X)是,但如果你的组合色(C)是一个离散值(例如从0到255的整数),然后将其四舍五入,所以你只能得到绘制颜色的近似值(X)。它的准确程度取决于alpha(绘制的颜色越透明,你确定颜色的准确度就越低)。因此,求解X(其中背景(Y)为白色):
X * a = C + a - 1 Therefore: X = (C + a - 1 ) / a
对于8位颜色通道(24位颜色):
X = 255 * ( C/255 + a/255 - 1 ) / (a/255)
(给定一个6位十六进制值,对每一对数字C应用此公式)。您可以优化它以避免浮点计算。我不知道那有没有用,但你只能这样了。
1条答案
按热度按时间disho6za1#
颜色值不只是相加。
当您在颜色
Y
上绘制颜色X
时,结果颜色C
的每个颜色通道的值由下式给出:使用浮点表示(每个通道是从0到1的值);其中
a
是X
的alpha通道(很容易转换回0-255)。在白色背景上,所有通道的
Y
均为1,因此:因此,如果
a
为0,显然找不到X,这是有道理的:如果颜色是完全透明的,则对合成颜色没有影响。同样,如果颜色是白色(
X
=1)(在白色背景上),则无法确定alpha(无论alpha如何,组合颜色都将是白色)。此外,如果不知道
X
或a
,则无法找到另一个。如果你知道颜色的阿尔法(
a
),那么您就可以确定(X
)是,但如果你的组合色(C
)是一个离散值(例如从0到255的整数),然后将其四舍五入,所以你只能得到绘制颜色的近似值(X
)。它的准确程度取决于alpha(绘制的颜色越透明,你确定颜色的准确度就越低)。因此,求解X(其中背景(
Y
)为白色):对于8位颜色通道(24位颜色):
(给定一个6位十六进制值,对每一对数字
C
应用此公式)。您可以优化它以避免浮点计算。
我不知道那有没有用,但你只能这样了。