ジュリアでRGBカラーコードを使用する方法
コード
Juliaで色を扱うために提供されるパッケージはColors.jl
だ。視覚化パッケージのPlots.jl
を読み込むと、Colors.jl
の中の機能も一緒に使用できる。RGB空間を表す色コードにはRGB, BGR, RGB24, RGBX, XRGBがサポートされており、これらはAbstractRGB
のサブタイプだ。RGBAはRGBに透明度が加わったものだ。
julia> using Plots
julia> subtypes(AbstractRGB)
5-element Vector{Any}:
BGR
RGB
RGB24
RGBX
XRGB
julia> subtypes(AbstractRGBA)
2-element Vector{Any}:
BGRA
RGBA
文字列
関数plot()
の色を指定するキーワードに文字列で"rgb(255, 0, 0)"
のように入力すれば、RGBコードが(255, 0, 0)の色を使用できる。下を見ればわかるが、文字列を入力してもいい理由は、plot()
が文字列を自動でパースしてくれるからのようだ。名前がある色の場合は、"red"
や:red
のように文字列やシンボルで使用できる。
using Plots
r = "rgb(255, 0, 0)" # 정수로 표현된 RGB 빨간색
g = "rgba(0, 255, 0, 0.2)" # 투명도가 0.2인 RGB 초록색
p = "rgb(50%, 0%, 100%)" # 퍼센테이지로 표현된 RGB 보라색
plot(
plot(rand(15), lc = r),
bar(rand(15), fc = g),
scatter(rand(15), mc = p),
layout = (3, 1)
)
パース
colorant"rgb(0, 0, 0)"
のようにRGB色コードをパースできる。
julia> r = colorant"rgb(255, 0, 0)" # 정수로 표현된 RGB 빨간색
RGB{N0f8}(1.0,0.0,0.0)
julia> g = colorant"rgba(0, 255, 0, 0.2)" # 투명도가 0.2인 초록색
RGBA{N0f8}(0.0,1.0,0.0,0.502)
julia> p = colorant"rgb(50%, 0%, 100%)" # 퍼센테이지로 표현된 RGB 보라색
RGB{N0f8}(0.502,0.0,1.0)
julia> plot(
plot(rand(15), lc = r),
bar(rand(15), fc = g),
scatter(rand(15), mc = p),
layout = (3, 1))
parse(RGB, "rgb(0, 255, 255)")
と同様にパースすることができる。
julia> parse(RGB, "rgb(0, 255, 255)")
RGB{N0f8}(0.0,1.0,1.0)
julia> parse(RGBA, "rgba(0, 255, 0, 0.5)")
RGBA{N0f8}(0.0,1.0,0.0,0.502)
直接定義
関数RGB()
, RGBA()
などを使えば、色を直接定義できる。
julia> RGB(1, 0, 0)
RGB{N0f8}(1.0,0.0,0.0)
julia> RGB(1.0, 0.0, 0.0)
RGB{Float64}(1.0,0.0,0.0)
julia> RGBA(1, 0, 0.5, 0.5)
RGBA{Float64}(1.0,0.0,0.5,0.5)
colorant
でパースされた色と正確に同じタイプを得るには、入力としてN0f8
タイプの数を入力する必要がある。これを使用するためにはFixedPointNumbers.jl
が必要だ。または、直接1.0N0f8
のように定義してもいい。以下は、colorant"rgb(255, 0, 0)"
と同じ、赤色の色を返すコードだ。
julia> using FixedPointNumbers
# RGB 빨간색 RGB
julia> colorant"rgb(255, 0, 0)"
RGB{N0f8}(1.0,0.0,0.0)
julia> RGB(1.0, 0.0, 0.0)
RGB{Float64}(1.0,0.0,0.0)
julia> RGB(1.0N0f8, 0N0f8, 0N0f8)
RGB{N0f8}(1.0,0.0,0.0)
julia> RGB(reinterpret(N0f8, UInt8(255)), reinterpret(N0f8, UInt8(0)), reinterpret(N0f8, UInt8(0)))
RGB{N0f8}(1.0,0.0,0.0)
他の色空間からの変換
関数convert()
は、他の色空間の色コードをRGBコードに変換する。
julia> using Colors
julia> convert(RGB{N0f8}, HSL(270, 0.5, 0.5))
ERROR: UndefVarError: `N0f8` not defined
julia> using FixedPointNumbers
julia> convert(RGB{N0f8}, HSL(270, 0.5, 0.5))
RGB{N0f8}(0.502,0.251,0.749)
色名を得る
関数rgb_string()
とrgba_string()
はそれぞれ色のRGB、RGBAコードを文字列で返す。
julia> rgb_string(colorant"rgba(255, 0, 0, 0.5)")
"rgb(255, 0, 0)"
julia> rgba_string(colorant"rgba(255, 0, 0, 0.5)")
"rgba(255, 0, 0, 0.502)"
julia> rgb_string(colorant"red")
"rgb(255, 0, 0)"
julia> rgb_string(parse(RGB, :blue))
"rgb(0, 0, 255)"
julia> rgb_string(colorant"#00FF00")
"rgb(0, 255, 0)"
併せて見る
環境
- OS: Windows11
- Version: Julia 1.9.4, Plots v1.39.0, Colors v0.12.10, FixedPointNumbers v0.8.4