ImageData:mapPixel (Français)

Transforme une image en appliquant une fonction à chacun de ses pixels.

Cette fonction est une fonction d'ordre supérieur. Elle prend une autre fonction en paramètre, et l'appelle pour chacun des pixels de l'ImageData (données d'image).

La fonction passée est appelée en boucle avec six paramètres pour chaque pixels. Les paramètres sont des nombres représentant les coordonnées x et y du pixel, ainsi que valeurs rouge, verte, bleue et alpha. La fonction doit retournée les nouvelles valeurs rouge, verte et bleue et alpha de ce pixel.

function pixelFunction(x, y, r, v, b, a)
    -- Patron pour définir votre propre fonction de mappage de pixel.
    -- appliquant des calculs donnant de nouvelles valeurs pour r, v, b et a
    -- ...
    return r, v, b, a
end

Dans les versions antérieures à 11.0, les valeurs de composantes de couleur étaient dans une étendue allant de 0 à 255 au lieu de 0 à 1.

Fonction

Synopsis

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

Arguments

function (Français) pixelFunction
Fonction à appliquer pour chaque pixel.
Disponible depuis LÖVE 0.9.0
number (Français) x (0)
Axe des x du coin haut gauche de l'aire dans l'ImageData pour laquelle la fonction s'applique.
number (Français) y (0)
Axe des y du coin haut gauche de l'aire dans l'ImageData pour laquelle la fonction s'applique.
number (Français) width (ImageData:getWidth())
Largeur de l'aire de l'ImageData pour laquelle la fonction s'applique.
number (Français) height (ImageData:getHeight())
Hauteur de l'aire de l'ImageData pour laquelle la fonction s'applique.

Retourne

Rien.

Exemples

Éclaircit une image

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

imageData:mapPixel( brighten )

Ajoute des bandes de couleur à une image

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

imageData:mapPixel( stripey )

source: http://khason.net/blog/hlsl-pixel-shader-effects-tutorial/ (Cassé 11/16. Voir les archivages de la page blogs.microsoft.co.il ou archive.org.)

Teinte une image en niveaux de gris

function tint ( x, y, r, v, b, a )
   local c = globalTintColor -- coueleur en tant que {r=r, v=v, b=b}
   local t = (r+g+b)/3 -- valeur de gris dans l'étendue [0, 1]
   if t < 0.5 then
      r = 2*t*c.r
      v = 2*t*c.v
      b = 2*t*c.b
   else
      r = 2*(t + c.r - t*c.r) - 1
      v = 2*(t + c.v - t*c.v) - 1
      b = 2*(t + c.b - t*c.b) - 1
   end
   return r,v,b,a
end


imageData:mapPixel( tint )

Voir également


Autres langues