love.math.gammaToLinear (Українська)

Доступне починаючи з LÖVE 0.9.1
Ця функція недоступна в попередніх версіях.

Перетворює колір з гамма-простору (sRGB) в лінійний простір (RGB). Це корисно, якщо ви при відображенні об'єктів використовуєте корекцію гами і вам потрібно обчислювати кольори в лінійному RGB-просторі в тих рідких випадках, коли LÖVE не виконує перетворення автоматично.

Почитати більше про відображення з корекцією гами можна (англійською) тут, тут, and тут.

В версіях до 11.0 значення кольорів приймалися в діапазоні від 0 до 255, а не від 0 до 1.

O.png Корекція гами — це складна тема, і в різних кольорових просторах легко заплутатися. Якщо ви не впевнені, чи вам потрібна ця функція, краще її не використовувати.  


Функція

Вигляд

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

-- Завантажує зображення і виконує попереднє множення його RGB-значень на альфа-канал,
-- для використання разом з режимом змішування кольорів ('alpha', 'premultiplied').
-- Множення правильно враховує кольоровий простір зображення.
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")

Див. також

Іншими мовами