AdjustRGB
Performs an RGB adjustment operation on a pixmap and returns the result.
Syntax

AdjustRGB(pm, A)

pm
is a pixmap 
A
is a matrix

Description
If pm
is a pixmap and A
an RGB adjustment matrix, then AdjustRGB(pm, A)
returns the pixmap obtained by applying A
to pm
.
An RGB adjustment matrix is a real 3×5 matrix of the form
⎛ rc rr rg rb ro ⎞ A = ⎜ gc gr gg gb go ⎟ ⎝ bc br bg bb bo ⎠
Each pixel in pm
is transformed in the same way. If a pixel has colour rgb(r, g, b)
, then its new RGB coordinates are obtained first by multiplying the four first columns of A
by the vector ❨1, r, g, b❩:
⎛1⎞ ⎛r'⎞ ⎛ rc rr rg rb ⎞⎜r⎟ ⎜g'⎟ = ⎜ gc gr gg gb ⎟⎜g⎟ ⎝b'⎠ ⎝ bc br bg bb ⎠⎝b⎠.
The final column of A
decides how the vector ❨r', g', b'❩ is made into a valid RGB coordinate vector, in which each component is restricted to [0, 1]
. If ro
is 0
, then r'
is moved into [0, 1]
by clamping; otherwise, r'
is moved into [0, 1]
by wrapping. The green and blue coordinates are treated similarly depending on go
and bo
, respectively.
Notice that this function can be used to alter the intensity of each component, to swap components, and to mix components.
Examples
A ≔ ❨❨0, 0, 0, 0, 0❩, ❨0, 0, 1, 0, 0❩, ❨0, 0, 1, 0, 0❩❩
⎛0 0 0 0 0⎞ ⎜0 0 1 0 0⎟ ⎝0 0 1 0 0⎠
AdjustRGB(ExampleData("harvestman"), A)
A ≔ ❨❨−.5, 1, 1, 1, 0❩, ❨−.4, 0, 1, 1, 0❩, ❨−.4, 0, 0, 1, 0❩❩
⎛−0.5 1 1 1 0⎞ ⎜−0.4 0 1 1 0⎟ ⎝−0.4 0 0 1 0⎠
AdjustRGB(ExampleData("harvestman"), A)
A ≔ ❨❨.2, 1, −.5, 1, 0❩, ❨−1, 1, 1.5, .2, 0❩, ❨.5, 0, −.4, 0.7, 0❩❩
⎛ 0.2 1 −0.5 1 0⎞ ⎜ −1 1 1.5 0.2 0⎟ ⎝ 0.5 0 −0.4 0.7 0⎠
AdjustRGB(ExampleData("harvestman"), A)