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

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

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

Звичайно кольори на екрані вже в гамма-просторі, і їх не треба перетворювати двічі. Кольори, розраховані математично, можуть бути в лінійному просторі RGB.

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

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

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

-- Завантажує зображення і виконує попереднє множення його 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")

Див. також

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