Difference between revisions of "love.math.linearToGamma (日本語)"
(Created page with "{{newin|0.9.1|091|type=function}} 線形空間 (RGB) からガンマ空間 (sRGB) へ色変換します。これは線形 RGB 色の値を画像へ格納する場合に有...") |
m |
||
Line 1: | Line 1: | ||
− | {{newin|[[0.9.1]]|091|type= | + | {{newin (日本語)|[[0.9.1 (日本語)|0.9.1]]|091|type=関数}} |
線形空間 (RGB) からガンマ空間 (sRGB) へ色変換します。これは線形 RGB 色の値を画像へ格納する場合に有用です。理由として暗色に対して線形 RGB 色空間は sRGB より低精度であるため、結果として描画時に気付くほどの色帯域となるからです。 | 線形空間 (RGB) からガンマ空間 (sRGB) へ色変換します。これは線形 RGB 色の値を画像へ格納する場合に有用です。理由として暗色に対して線形 RGB 色空間は sRGB より低精度であるため、結果として描画時に気付くほどの色帯域となるからです。 | ||
Line 5: | Line 5: | ||
ガンマ補正表示に関する詳細は [http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html ここ]、 [http://filmicgames.com/archives/299 ここ]、さらに[http://renderwonk.com/blog/index.php/archive/adventures-with-gamma-correct-rendering/ ここ] にあります。 | ガンマ補正表示に関する詳細は [http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html ここ]、 [http://filmicgames.com/archives/299 ここ]、さらに[http://renderwonk.com/blog/index.php/archive/adventures-with-gamma-correct-rendering/ ここ] にあります。 | ||
+ | |||
+ | バージョン [[11.0 (日本語)|11.0]] 以前まで、配色成分における値の範囲は小数値の 0 〜 1 ではなく整数値の 0 〜 255 です。 | ||
{{notice|ガンマ補正表示は高度な話題であり色空間に関してたやすく混乱してしまいます。これが必要か不明であれば避けたいと思っても構いません。}} | {{notice|ガンマ補正表示は高度な話題であり色空間に関してたやすく混乱してしまいます。これが必要か不明であれば避けたいと思っても構いません。}} | ||
Line 49: | Line 51: | ||
<source lang="lua"> | <source lang="lua"> | ||
local function PremultiplyLinearPixel(x, y, r, g, b, a) | local function PremultiplyLinearPixel(x, y, r, g, b, a) | ||
− | r = r * a | + | r = r * a |
− | g = g * a | + | g = g * a |
− | b = b * a | + | b = b * a |
return r, g, b, a | return r, g, b, a | ||
end | end | ||
Line 57: | Line 59: | ||
local function PremultiplyGammaPixel(x, y, r, g, b, a) | local function PremultiplyGammaPixel(x, y, r, g, b, a) | ||
r, g, b = love.math.gammaToLinear(r, g, b) | r, g, b = love.math.gammaToLinear(r, g, b) | ||
− | r = r * a | + | r = r * a |
− | g = g * a | + | g = g * a |
− | b = b * a | + | b = b * a |
r, g, b = love.math.linearToGamma(r, g, b) | r, g, b = love.math.linearToGamma(r, g, b) | ||
return r, g, b, a | return r, g, b, a | ||
Line 86: | Line 88: | ||
{{#set:Description=線形空間 (RGB) からガンマ空間 (sRGB) へ色変換します。}} | {{#set:Description=線形空間 (RGB) からガンマ空間 (sRGB) へ色変換します。}} | ||
== そのほかの言語 == | == そのほかの言語 == | ||
− | {{i18n|love.math.linearToGamma}} | + | {{i18n (日本語)|love.math.linearToGamma}} |
Latest revision as of 04:17, 13 June 2019
LÖVE 0.9.1 から使用可能 |
この関数は以前のバージョンでは非対応です。 |
線形空間 (RGB) からガンマ空間 (sRGB) へ色変換します。これは線形 RGB 色の値を画像へ格納する場合に有用です。理由として暗色に対して線形 RGB 色空間は sRGB より低精度であるため、結果として描画時に気付くほどの色帯域となるからです。
一般に、画面上で見える物に基づいて選択された色が既にガンマ空間に当てはまるならば、倍数変換をしないでください。数学的なものを使用して計算された色において大抵は線形 RGB 空間に当てはまります。
ガンマ補正表示に関する詳細は ここ、 ここ、さらにここ にあります。
バージョン 11.0 以前まで、配色成分における値の範囲は小数値の 0 〜 1 ではなく整数値の 0 〜 255 です。
ガンマ補正表示は高度な話題であり色空間に関してたやすく混乱してしまいます。これが必要か不明であれば避けたいと思っても構いません。 |
Contents
関数
概要
cr, cg, cb = love.math.linearToGamma( lr, lg, lb )
引数
返値
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")
関連