ImageData:mapPixel (Українська)

Перетворює зображення, викликаючи функцію для кожного пікселя.

Це функція вищого порядку. Вона приймає іншу функцію як параметр і викликає її для кожного пікселя в ImageData.

Передана функція отримує шість параметрів для кожного пікселя по черзі. Параметри — це числа, які відповідають координатам X та Y, а також червоному, зеленому, синьому та альфа-компоненту. Ця функція має повернути нові червоний, зелений, синій та альфа-компонент для цього пікселя.

function pixelFunction(x, y, r, g, b, a)
    -- шаблон функції для перетворення пікселів
    -- розрухайте нові значення для r, g, b і a
    -- ...
    return r, g, b, a
end

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

Функція

Вигляд

ImageData:mapPixel( pixelFunction, x, y, width, height )

Аргументи

function pixelFunction
Функція, яка буде викликана для кожного пікселя.
Доступне починаючи з LÖVE 0.9.0
number x (0)
Координата X лівого верхнього кута області на об'єкті ImageData, для якого буде викликана функція.
number y (0)
Координата Y лівого верхнього кута області на об'єкті ImageData, для якого буде викликана функція.
number width (ImageData:getWidth())
Ширина області на об'єкті ImageData, для якого буде викликана функція.
number height (ImageData:getHeight())
Висота області на об'єкті ImageData, для якого буде викликана функція.

Повертає

Нічого.

Приклади

Зробити зображення яскравішим

function brighten( x, y, r, g, b, a )
   r = math.min(r * 3, 1)
   g = math.min(g * 3, 1)
   b = math.min(b * 3, 1)
   return r,g,b,a
end

imageData:mapPixel( brighten )

Додати кольорові смужки на зображення

function stripey( x, y, r, g, b, a )
   r = math.min(r * math.sin(x*100)*2, 1)
   g = math.min(g * math.cos(x*150)*2, 1)
   b = math.min(b * math.sin(x*50)*2, 1)
   return r,g,b,a
end

imageData:mapPixel( stripey )

джерело: http://khason.net/blog/hlsl-pixel-shader-effects-tutorial/ (посилання зараз не працює, див. архівну версію на archive.org.)

Див. також


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