love.math.linearToGamma (日本語)

LÖVE 0.9.1 から使用可能
この関数は以前のバージョンでは非対応です。

線形空間 (RGB) からガンマ空間 (sRGB) へ色変換します。これは線形 RGB 色の値を画像へ格納する場合に有用です。理由として暗色に対して線形 RGB 色空間は sRGB より低精度であるため、結果として描画時に気付くほどの色帯域となるからです。

一般に、画面上で見える物に基づいて選択された色が既にガンマ空間に当てはまるならば、倍数変換をしないでください。数学的なものを使用して計算された色において大抵は線形 RGB 空間に当てはまります。

ガンマ補正表示に関する詳細は ここここ、さらにここ にあります。

バージョン 11.0 以前まで、配色成分における値の範囲は小数値の 0 〜 1 ではなく整数値の 0 〜 255 です。

O.png ガンマ補正表示は高度な話題であり色空間に関してたやすく混乱してしまいます。これが必要か不明であれば避けたいと思っても構いません。  


関数

概要

cr, cg, cb = love.math.linearToGamma( lr, lg, lb )

引数

number lr
変換したい線形 RGB 色の赤チャンネル。
number lg
変換したい線形 RGB 色の緑チャンネル。
number lb
変換したい線形 RGB 色の青チャンネル。

返値

number cr
ガンマ sRGB 空間へ変換された色の赤チャンネル。
number cg
ガンマ sRGB 空間へ変換された色の緑チャンネル。
number cb
ガンマ sRGB 空間へ変換された色の青チャンネル。

注釈

透過値は第四引数として関数へ渡すことができますが、透過は常に線形であるため無変更で返されます。

関数

概要

cr, cg, cb = love.math.linearToGamma( color )

引数

table color
変換したい RGB 色の赤、青、および青チャンネルの配列。

返値

number cr
ガンマ sRGB 空間へ変換された色の赤チャンネル。
number cg
ガンマ sRGB 空間へ変換された色の緑チャンネル。
number cb
ガンマ sRGB 空間へ変換された色の青チャンネル。

関数

概要

c = love.math.linearToGamma( lc )

引数

number lc
変換したい線形 RGB 空間における色チャンネルの値。

返値

number c
ガンマ sRGB 空間における色チャンネルの値。

用例

線形 RGB 空間に当てはまる画像の RGB 値の透過 へ事前に乗算を行います

local function PremultiplyLinearPixel(x, y, r, g, b, a)
   r = r * a
   g = g * a
   b = b * a
   return r, g, b, a
end

local function PremultiplyGammaPixel(x, y, r, g, b, a)
   r, g, b = love.math.gammaToLinear(r, g, b)
   r = r * a
   g = g * a
   b = b * a
   r, g, b = love.math.linearToGamma(r, g, b)
   return r, g, b, a
end

-- 画像を読み込んで ('alpha', 'premultiplied') 混合方式を使用するために RGB 値の 透過に事前へ乗算を行います。
-- 画像の色空間に対して乗算にて正確に計算します。
function NewPremultipliedImage(filepath, flags)
    local imagedata = love.image.newImageData(filepath)

    local mapfunction = (flags and flags.linear) and PremultiplyLinearPixel or PremultiplyGammaPixel
    imagedata:mapPixel(mapfunction)

    return love.graphics.newImage(imagedata, flags)
end

image = NewPremultipliedImage("pig.png")

関連


そのほかの言語