使用Colors.jl,如何更改`Color`的alpha透明度值?

问题描述 投票:0回答:3

如果我有 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)

之类的东西
colors julia
3个回答
3
投票

您可以在带有 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)

2
投票

为了提高效率,颜色被定义为不可变的结构。因此,更改字段需要创建一个新的不可变字段。结果有人(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
添加了透明度值)


0
投票

使用

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

© www.soinside.com 2019 - 2024. All rights reserved.