如果我有 Colors.jl
Color
,例如 HSLA(200,0.9,0.8,0.8)
、HSL(200,0.9,0.8,0.8)
或 RGB(200,100,100)
,是否有一种通用方法可以返回具有指定 alpha 透明度值的颜色版本(并提升类型)如果输入没有 alpha 值)?
例如像
set_alpha(in_color,alpha=0.9)
之类的东西
您可以在带有 alpha 版本的构造函数中使用非 alpha 版本的颜色:
julia> a = HSL(200.0, 0.8, 0.8)
HSL{Float64}(200.0,0.8,0.8)
julia> aa = HSLA(a, 0.5)
HSLA{Float64}(200.0,0.8,0.8,0.5)
为了提高效率,颜色被定义为不可变的结构。因此,更改字段需要创建一个新的不可变字段。结果有人(Jan Weidner)写了一个包来做到这一点,
Accessors.jl
。所以使用这个包可以写:
julia> using Colors, Accessors
julia> c = HSLA(100,0.1,0.1,0.8)
HSLA{Float64}(100.0,0.1,0.1,0.8)
julia> @set c.alpha = 0.3
HSLA{Float64}(100.0,0.1,0.1,0.3)
看起来很简单。也许为这些操作定义更多可读函数的包会很好,但我的谷歌搜索尝试还没有找到它。
受@Bill 的回答启发,另一个选项是
HSLA(HSL(c),0.2)
其作用相同(内部
HSL
项目和HSLA
添加了透明度值)
使用
alphacolor()
包中的函数Colors
:
julia> using Colors
julia> c = RGBA(0.5, 0.5, 0.5, 1.0)
RGBA{Float64}(0.5,0.5,0.5,1.0)
julia> alphacolor(c, 0.3)
ARGB{Float64}(0.5,0.5,0.5,0.3)
julia> d = RGB(0.5, 0.5, 0.5)
RGB{Float64}(0.5,0.5,0.5)
julia> alphacolor(d, 0.3)
ARGB{Float64}(0.5,0.5,0.5,0.3)
这是OP想要的
set_alpha
功能。我在中学到了这个解决方案
https://discourse.julialang.org/t/override-or-change-opacity-of-a-given-rgba-color/106880