logo

ジュリアでRGBカラーコードを使用する方法 📂ジュリア

ジュリアで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

併せて見る