love.math.linearToGamma
Доступно начиная с LÖVE 0.9.1
Эта функция не поддерживается в более ранних версиях.
Преобразует цвет из линейного пространства (RGB) в гамма-пространство (sRGB). Это полезно при хранении линейных значений RGB цвета в изображении, потому что линейное RGB-пространство имеет меньшую точность для тёмных цветов, что может привести к заметному искажению цвета при отрисовке.
В целом, цвета, выбранные на основе их отображения на экране, уже находятся в гамма-пространстве и не должны быть повторно преобразованы. Цвета, вычисленные с помощью математических формул, часто находятся в линейном RGB-пространстве.
Подробнее о гамма-корректной отрисовке здесь, здесь и здесь.
В версиях до 11.0 значения компонентов цвета находились в диапазоне от 0 до 255 вместо 0 до 1.
Гамма-корректная отрисовка — сложная тема, и легко запутаться в цветовых пространствах. Если вы не уверены, нужна ли вам эта функция, лучше от неё воздержаться.
Функция
Синтаксис
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
-- 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.linearToGamma