我按如下方式创建两种颜色:
red <- rgb(140, 35, 35, alpha=255, max=255)
blue <- rgb(35, 35, 140, alpha=0.6*255, max=255)
如何创建通过重叠&#34;透明&#34;获得的新颜色?红色的蓝色?
我看到this answer但是(a)我不知道如何将它应用于rgb对象,(b)我希望有一种内置的方法来实现它。
答案 0 :(得分:1)
我不知道内置方式,但你可以将字符串分解回原始组件 -
strtoi(x = substr(red,2,3), base = 16)
+ ...
答案 1 :(得分:1)
我不知道是否有内置方式。我假设您想要某种“混合”(即加权平均值,可能使用您链接到的页面中的方法)而不是“总和”,因为添加在r-help上有类似的问题,其中更精通颜色的人指出,还有其他颜色空间,混合颜色可以提供更明智的效果。 Duncan Murdoch建议的方法是转换为hsv-colorspace,并让colorRampPalette通过选择在这两个“点”的位置绘制的线的中点来进行“平均”:
# Average the 1st two by taking the middle colour of a 3 colour palette
x <- colorRampPalette(c(red,blue), space = "Lab")(3)[2]
x
[1] "#6C1F57"
> red
[1] "#8C2323FF"
> blue
[1] "#23238C99"
由于这只返回三个颜色值而没有alpha,您可能需要单独处理它。我不是一个有颜色知识的用户,所以我不能就此事提出建议。
答案 2 :(得分:1)
基于TheComeOnMan answer,我想出了这个似乎做我需要的小功能:
overlap <- function(under, over) {
r1 <- strtoi(substr(under, 2, 3), base = 16)
r2 <- strtoi(substr(over, 2, 3), base = 16)
g1 <- strtoi(substr(under, 4, 5), base = 16)
g2 <- strtoi(substr(over, 4, 5), base = 16)
b1 <- strtoi(substr(under, 6, 7), base = 16)
b2 <- strtoi(substr(over, 6, 7), base = 16)
a <- strtoi(substr(over, 8, 9), base = 16) / 255 # alpha
result <- rgb(a * r2 + (1 - a) * r1,
a * g2 + (1 - a) * g1,
a * b2 + (1 - a) * b1,
alpha = 255,
max=255)
return(result)
}