对于每种颜色:C '= C(a/255)+255(1-(a/255)) 因此,对于#6A8F6509: R '= 143(106/255)+255(1-(106/255)=(近似值)208 G '= 101(106/255)+255(1-(106/255)=(近似值)191 B '= 9(106/255)+255(1-(106/255)=(近似值)153 所以你的答案应该是:#D0BF99,如果我的计算正确的话。这也只适用于全白背景-对于非白色背景,第二个加数应该有适当的背景颜色值,而不是255。
7条答案
按热度按时间piwo6bdm1#
1tuwyuhd2#
如果你想做的代码,你可以尝试以下代码:
svujldwt3#
对于每种颜色:C '= C(a/255)+255(1-(a/255))
因此,对于#6A8F6509:
R '= 143(106/255)+255(1-(106/255)=(近似值)208
G '= 101(106/255)+255(1-(106/255)=(近似值)191
B '= 9(106/255)+255(1-(106/255)=(近似值)153
所以你的答案应该是:#D0BF99,如果我的计算正确的话。这也只适用于全白背景-对于非白色背景,第二个加数应该有适当的背景颜色值,而不是255。
再次查看公式,我不完全确定公式是应用于每种颜色还是整个颜色(快速视觉测试应该可以告诉你--我猜是每种颜色)。我应该指出,这是直接从Alpha Compositing wiki页面获得的公式:
http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
z0qdvdin4#
尝试
前两个数字表示任何颜色的α值。
mtb9vblg5#
计算将半透明颜色放置在另一种颜色上时的外观。
Kotlin颜色扩展:
用法:
siotufzp6#
Jetpack合成版本为
cuxqih217#
我承认我不知道Android的Java,但是你不能把颜色从#6A8F6509改为#FF8F6509吗?在大多数现代编程语言中,颜色通常编码为##AARRGBB。
AA = Alpha的十六进制,范围从0(十六进制00)(完全透明)到255(十六进制FF)(不透明)。
RR =颜色的红色部分的十六进制数。与上面类似,0表示没有红色,255表示完全红色。
GG =绿色六角。
BB =蓝色的六角。
根据您的更新,您可以执行以下操作来获取颜色:
对于红色、绿色和蓝色中的每一个:得到透明色和背景色之间的差值,然后乘以alpha值,再除以255(十六进制FF,如果你喜欢的话),最后把这个数字加到透明色的值上。
在您的情况下:
好的,我已经使用Wikipedia的Alpha Blending函数基于LJ2的答案重做了公式。并让同事用Paint.Net确认了这一点。这是背景颜色完全不透明的版本,它是在C#中,抱歉:
对每个R、G和B值都这样做,你应该会得到正确的答案。如果Android的Java有不同的,double可以是Double/Single/Float,int可以是Int32/Int16/Int64/Byte。不幸的是,我不记得如何在Java中转换这两个值。