Difference between revisions of "ImageData:mapPixel"
m (Added New feature template and default values) |
(→Examples) |
||
Line 55: | Line 55: | ||
</source> | </source> | ||
source: http://khason.net/blog/hlsl-pixel-shader-effects-tutorial/ (broken 11/16. See [http://blogs.microsoft.co.il/tamir/2008/06/17/hlsl-pixel-shader-effects-tutorial/ blogs.microsoft.co.il] or [http://web.archive.org/web/20150515111551/http://khason.net/blog/hlsl-pixel-shader-effects-tutorial/ archive.org] mirrors.) | source: http://khason.net/blog/hlsl-pixel-shader-effects-tutorial/ (broken 11/16. See [http://blogs.microsoft.co.il/tamir/2008/06/17/hlsl-pixel-shader-effects-tutorial/ blogs.microsoft.co.il] or [http://web.archive.org/web/20150515111551/http://khason.net/blog/hlsl-pixel-shader-effects-tutorial/ archive.org] mirrors.) | ||
+ | |||
+ | === Tint grayscaled image: === | ||
+ | <source lang="lua"> | ||
+ | function tint ( x, y, r, g, b, a ) | ||
+ | local c = globalTintColor -- color as {r=r, g=g, b=b} | ||
+ | local t = (r+g+b)/3 -- grayscale value in range [0, 1] | ||
+ | if t < 0.5 then | ||
+ | r = 2*t*c.r | ||
+ | g = 2*t*c.g | ||
+ | b = 2*t*c.b | ||
+ | else | ||
+ | r = 2*(t + c.r - t*c.r) - 1 | ||
+ | g = 2*(t + c.g - t*c.g) - 1 | ||
+ | b = 2*(t + c.b - t*c.b) - 1 | ||
+ | end | ||
+ | return r,g,b,a | ||
+ | end | ||
+ | |||
+ | |||
+ | imageData:mapPixel( tint ) | ||
+ | </source> | ||
== See Also == | == See Also == |
Revision as of 12:51, 5 February 2022
Transform an image by applying a function to every pixel.
This function is a higher-order function. It takes another function as a parameter, and calls it once for each pixel in the ImageData.
The passed function is called with six parameters for each pixel in turn. The parameters are numbers that represent the x and y coordinates of the pixel and its red, green, blue and alpha values. The function should return the new red, green, blue, and alpha values for that pixel.
function pixelFunction(x, y, r, g, b, a)
-- template for defining your own pixel mapping function
-- perform computations giving the new values for r, g, b and a
-- ...
return r, g, b, a
end
In versions prior to 11.0, color component values were within the range of 0 to 255 instead of 0 to 1.
Contents
Function
Synopsis
ImageData:mapPixel( pixelFunction, x, y, width, height )
Arguments
function pixelFunction
- Function to apply to every pixel.
number x (0)
- The x-axis of the top-left corner of the area within the ImageData to apply the function to.
number y (0)
- The y-axis of the top-left corner of the area within the ImageData to apply the function to.
number width (ImageData:getWidth())
- The width of the area within the ImageData to apply the function to.
number height (ImageData:getHeight())
- The height of the area within the ImageData to apply the function to.
Returns
Nothing.
Examples
Brighten an image:
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 )
Add colored stripes to an image:
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 )
source: http://khason.net/blog/hlsl-pixel-shader-effects-tutorial/ (broken 11/16. See blogs.microsoft.co.il or archive.org mirrors.)
Tint grayscaled image:
function tint ( x, y, r, g, b, a )
local c = globalTintColor -- color as {r=r, g=g, b=b}
local t = (r+g+b)/3 -- grayscale value in range [0, 1]
if t < 0.5 then
r = 2*t*c.r
g = 2*t*c.g
b = 2*t*c.b
else
r = 2*(t + c.r - t*c.r) - 1
g = 2*(t + c.g - t*c.g) - 1
b = 2*(t + c.b - t*c.b) - 1
end
return r,g,b,a
end
imageData:mapPixel( tint )
See Also
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info