love.math.gammaToLinear
Доступно начиная с LÖVE 0.9.1
Эта функция не поддерживается в более ранних версиях.
Преобразует цвет из гамма-пространства (sRGB) в линейное пространство (RGB). Это полезно при выполнении рендеринга с учётом гаммы, когда необходимо выполнить математические операции в линейном RGB в тех редких случаях, когда LÖVE не выполняет преобразования автоматически.
Дополнительную информацию о рендеринге с учётом гаммы можно найти здесь, здесь и здесь.
В версиях до 11.0 значения компонентов цвета находились в диапазоне от 0 до 255 вместо 0 до 1.
Рендеринг с учётом гаммы — это сложная тема, и легко запутаться в цветовых пространствах. Если вы не уверены, нужен ли вам этот метод, лучше его избегать.
Функция
Сигнатура
lr, lg, lb = love.math.gammaToLinear( r, g, b )
Аргументы
number r- Красный канал цвета sRGB для преобразования.
number g- Зелёный канал цвета sRGB для преобразования.
number b- Синий канал цвета sRGB для преобразования.
Возвращаемые значения
number lr- Красный канал преобразованного цвета в линейном пространстве RGB.
number lg- Зелёный канал преобразованного цвета в линейном пространстве RGB.
number lb- Синий канал преобразованного цвета в линейном пространстве RGB.
Примечания
Значение альфа-канала может быть передано в функцию в качестве четвёртого аргумента, но оно будет возвращено без изменений, так как альфа всегда линейна.
Функция
Сигнатура
lr, lg, lb = love.math.gammaToLinear( color )
Аргументы
table color- Массив с красным, зелёным и синим каналами цвета sRGB для преобразования.
Возвращаемые значения
number lr- Красный канал преобразованного цвета в линейном пространстве RGB.
number lg- Зелёный канал преобразованного цвета в линейном пространстве RGB.
number lb- Синий канал преобразованного цвета в линейном пространстве RGB.
Функция
Сигнатура
lc = love.math.gammaToLinear( c )
Аргументы
number c- Значение канала цвета в пространстве sRGB для преобразования.
Возвращаемые значения
number lc- Значение канала цвета в линейном пространстве RGB.
Примеры
Умножение альфа-канала изображения на его значения 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
-- Loads an image and pre-multiplies its RGB values with its alpha, for use with the ('alpha', 'premultiplied') blend mode.
-- The multiplication correctly accounts for the color-space of the image.
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") См. также
© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.math.gammaToLinear