Module rastergraphics - Graphics primitives for rasters
Graphics primitives for rasters.
Maintainer:
David Wood <D.C.Wood@kent.ac.uk>
Index
-
Data type
ANGLE- ANGLE data type -
Group
ANGLE- constants-
Constant
ANGLE.DEGREE- 2^32 / 360 (approx.) -
Constant
ANGLE.GRADE- 2^32 / 400 (approx.) -
Constant
ANGLE.RADIAN- 2^31 / pi (approx.) -
Constant
ANGLE.RIGHT- 2^30 (exact) -
Constant
ANGLE.STRAIGHT- 2^31 (exact)
-
Constant
-
Function
CIDROC- Inverse CORDIC algorithm; Converts Cartesian (X, Y) to polar coordinates-
Constant
CORDIC.CONST- Magic constant
-
Constant
-
Group
COLOUR- Common colours- Constant
COLOUR.BLACK - Constant
COLOUR.BLUE - Constant
COLOUR.BROWN - Constant
COLOUR.CYAN - Constant
COLOUR.GREEN - Constant
COLOUR.GREY - Constant
COLOUR.MAGENTA - Constant
COLOUR.MAROON - Constant
COLOUR.NAVY - Constant
COLOUR.OCTARINE - Constant
COLOUR.ORANGE - Constant
COLOUR.PINK - Constant
COLOUR.PURPLE - Constant
COLOUR.RED - Constant
COLOUR.SKY - Constant
COLOUR.VIOLET - Constant
COLOUR.WHITE - Constant
COLOUR.YELLOW
- Constant
-
Function
CORDIC- CORDIC rotation algorithm-
Constant
CORDIC.CONST- Magic constant
-
Constant
-
Group
PALETTE- Codes for permute arguments
-
Function
circle.hits- Does circle hit anything? -
Process
copy.raster- Copy one raster onto another -
Function
desaturate.colour- Desaturate a colour value -
Function
dither- Dither -
Process
draw.arc- Draws a circular arc-
Process
arc- Basic PROC; arc <= ANGLE.RIGHT
-
Process
-
Process
draw.circle- Draws a circle-
Process
points- Decide how to plot points -
Process
points.1- Plots eight points at (+/-x, +/-y) relative to centre (x.0, y0) , all within raster (fast) -
Process
points.2- Plots eight points at (+/-x, +/-y) relative to centre (x.0, y0) , some outside raster (slow)-
Process
point- Plot point if inside raster
-
Process
-
Process
-
Process
draw.horizontal.line- Draws a horizontal line -
Process
draw.line- Draw a straight line -
Process
draw.rectangle- Draws a rectangular box -
Process
draw.vertical.line- Draws a vertical line -
Process
draw.wallpaper- Cover dst with copies of dst -
Process
fill.circle- Draws a solid circle -
Process
fill.circle.diameter- Draws a solid circle -
Process
fill.ellipse.radii- Draws a solid ellipse -
Process
fill.rectangle- Draws a solid rectangle -
Process
fill.square- Draw a solid square -
Function
hsv.to.rgb- Convert a colour from HSV to RGB -
Function
map.colour.spectrum- Maps x ( 0.0 <= x < 1.0 ) to INT representing a colour, according to the code permute -
Function
map.colour.wheel- Maps x ( 0.0 <= x < 1.0 ) to INT representing a colour, according to the code permute -
Function
map.to.components.spectrum- Maps code value into three BYTEs representing primary colours (not necessarily RGB), with smooth transitions-
Function
smooth- Smooth transition
-
Function
-
Function
map.to.components.wheel- As map.to.components.spectrum , but without mapping through black - Operator
* (ANGLE, INT) - Operator
* (INT, ANGLE) -
Operator
+ (ANGLE, ANGLE)- Addition operator - Operator
- (ANGLE) - Operator
- (ANGLE, ANGLE) - Operator
/ (ANGLE, INT) - Operator
< (ANGLE, ANGLE) - Operator
<= (ANGLE, ANGLE) - Operator
> (ANGLE, ANGLE) - Operator
>= (ANGLE, ANGLE) -
Operator
~ (ANGLE)- Reverse operator - Process
overwrite.raster -
Function
pack.colour- Pack RGB BYTEs to an INT -
Function
pack.colour.float- As pack.colour , but taking REAL32 arguments -
Function
pack.colour.permuted- Maps three BYTEs representing colours to an INT , according to the code permute -
Function
undither- Reverse Dither -
Function
unpack.colour- Unpack an INT to RGB BYTEs
Declarations
spectrum.occ:31Function map.to.components.spectrum
BYTE, BYTE, BYTE FUNCTION map.to.components.spectrum (VAL REAL64 x)
Maps code value into three BYTEs representing primary colours (not necessarily RGB), with smooth transitions.
Parameters:
VAL REAL64 |
x |
Value (0.0 <= x < 1.0)
|
Returns:
BYTE |
"red", "green", "blue"
|
spectrum.occ:41Function smooth
BYTE INLINE FUNCTION smooth (VAL REAL64 x)
Smooth transition.
Parameters:
VAL REAL64 |
x |
Argument; 0.0 <= x <= 1.0
|
Returns:
BYTE |
0 <= "colour" <= #FF |
spectrum.occ:75Function map.to.components.wheel
BYTE, BYTE, BYTE FUNCTION map.to.components.wheel (VAL REAL64 x)
As map.to.components.spectrum, but without mapping through black.
spectrum.occ:115Function pack.colour.permuted
INT FUNCTION pack.colour.permuted (VAL BYTE r, g, b, VAL INT permute)
Maps three BYTEs representing colours to an INT, according to the code permute.
Parameters:
VAL BYTE |
r, g, b
|
"red", "green", "blue" |
VAL INT |
permute |
Permutation code |
Returns:
INT |
#rrggbb |
spectrum.occ:159Function map.colour.spectrum
INT FUNCTION map.colour.spectrum (VAL REAL64 x, VAL INT permute)
Maps x (0.0 <= x < 1.0) to INT representing a colour, according to the code permute. Shades from black through "red", "yellow", "green", "cyan", "magenta", back to "red", and finally black.
x >= 1.0 shown as black; x < 0.0 shown as dark grey.
Parameters:
VAL REAL64 |
x |
(0.0 <= x < 1.0) |
VAL INT |
permute |
Permutation code |
Returns:
INT |
#rrggbb |
spectrum.occ:188Function map.colour.wheel
INT FUNCTION map.colour.wheel (VAL REAL64 x, VAL INT permute)
Maps x (0.0 <= x < 1.0) to INT representing a colour, according to the code permute. Shades from "red" through "yellow", "green", "cyan", "magenta", back to "red".
x >= 1.0 shown as black; x < 0.0 shown as white.
Parameters:
VAL REAL64 |
x |
(0.0 <= x < 1.0) |
VAL INT |
permute |
Permutation code |
Returns:
INT |
#rrggbb |
circle.occ:34Process draw.circle
PROC draw.circle (VAL INT x.0, y.0, radius, VAL INT colour, [][]INT raster)
Draws a circle.
Clips as necessary.
Based on Foley & van Dam, Computer Graphics Principles and Practice, Second Edition in C, Fig. 3.16.
Parameters:
VAL INT |
x.0, y.0
|
Centre |
VAL INT |
radius |
Radius |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
circle.occ:42Process points.1
INLINE PROC points.1 (VAL INT x, y)
Plots eight points at (+/-x, +/-y) relative to centre (x.0, y0), all within raster (fast).
circle.occ:59Process points.2
PROC points.2 (VAL INT x, y)
Plots eight points at (+/-x, +/-y) relative to centre (x.0, y0), some outside raster (slow).
circle.occ:65Process point
PROC point (VAL INT x, y)
Plot point if inside raster
Parameters:
VAL INT |
x, y
|
Coordinates |
circle.occ:93Process points
INLINE PROC points (VAL INT x, y, VAL BOOL b)
Decide how to plot points
Parameters:
VAL INT |
x, y
|
Coordinates |
VAL BOOL |
b |
How to plot |
disc2.occ:30Process fill.circle.diameter
PROC fill.circle.diameter (VAL INT x, y, d, VAL INT colour, [][]INT raster)
Draws a solid circle. Clips as necessary.
Parameters:
VAL INT |
x, y
|
Coordinates of centre |
VAL INT |
d |
Diameter |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
lines.occ:31Process draw.horizontal.line
PROC draw.horizontal.line (VAL INT x, y, l, VAL INT colour, [][]INT raster)
Draws a horizontal line.
Clips as necessary.
Parameters:
VAL INT |
x, y
|
Starting point |
VAL INT |
l |
Length |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
lines.occ:67Process draw.vertical.line
PROC draw.vertical.line (VAL INT x, y, l, VAL INT colour, [][]INT raster)
Draws a vertical line.
Clips as necessary.
Parameters:
VAL INT |
x, y
|
Starting point |
VAL INT |
l |
Length |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
lines.occ:104Process draw.rectangle
PROC draw.rectangle (VAL INT x, y, w, h, VAL INT colour, [][]INT raster)
Draws a rectangular box.
Clips as necessary.
Parameters:
VAL INT |
x, y
|
Top left corner |
VAL INT |
w |
Width |
VAL INT |
h |
Height/depth |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
graphics.inc:27Group COLOUR
Common colours
Assume coded as #rrggbb, which ain't necessarily so.
graphics.inc:31Constant COLOUR.BLACK
VAL INT COLOUR.BLACK
graphics.inc:32Constant COLOUR.WHITE
VAL INT COLOUR.WHITE
graphics.inc:33Constant COLOUR.RED
VAL INT COLOUR.RED
graphics.inc:34Constant COLOUR.GREEN
VAL INT COLOUR.GREEN
graphics.inc:35Constant COLOUR.BLUE
VAL INT COLOUR.BLUE
graphics.inc:36Constant COLOUR.YELLOW
VAL INT COLOUR.YELLOW
graphics.inc:37Constant COLOUR.CYAN
VAL INT COLOUR.CYAN
graphics.inc:38Constant COLOUR.MAGENTA
VAL INT COLOUR.MAGENTA
graphics.inc:39Constant COLOUR.GREY
VAL INT COLOUR.GREY
graphics.inc:40Constant COLOUR.ORANGE
VAL INT COLOUR.ORANGE
graphics.inc:41Constant COLOUR.PINK
VAL INT COLOUR.PINK
graphics.inc:42Constant COLOUR.SKY
VAL INT COLOUR.SKY
graphics.inc:43Constant COLOUR.MAROON
VAL INT COLOUR.MAROON
graphics.inc:44Constant COLOUR.BROWN
VAL INT COLOUR.BROWN
graphics.inc:45Constant COLOUR.NAVY
VAL INT COLOUR.NAVY
graphics.inc:46Constant COLOUR.PURPLE
VAL INT COLOUR.PURPLE
graphics.inc:47Constant COLOUR.VIOLET
VAL INT COLOUR.VIOLET
graphics.inc:49Constant COLOUR.OCTARINE
VAL INT COLOUR.OCTARINE
graphics.inc:61Function pack.colour
INT INLINE FUNCTION pack.colour (VAL BYTE r, g, b)
Pack RGB BYTEs to an INT.
Assume coded as #rrggbb, which ain't necessarily so.
Parameters:
VAL BYTE |
r, g, b
|
Primary colour components |
Returns:
INT |
#rrggbb |
graphics.inc:69Function pack.colour.float
INT INLINE FUNCTION pack.colour.float (VAL REAL32 r, g, b)
As pack.colour, but taking REAL32 arguments.
Parameters:
VAL REAL32 |
r, g, b
|
Primary colour components in the range 0.0 to 1.0 |
Returns:
INT |
#rrggbb |
graphics.inc:78Function unpack.colour
BYTE, BYTE, BYTE INLINE FUNCTION unpack.colour (VAL INT c)
Unpack an INT to RGB BYTEs.
Parameters:
VAL INT |
c |
#rrggbb |
Returns:
BYTE |
r, g, b
|
Primary colour components |
graphics.inc:82Group PALETTE
Codes for permute arguments.
graphics.inc:86Constant PALETTE.RGB
VAL INT PALETTE.RGB
graphics.inc:87Constant PALETTE.BGR
VAL INT PALETTE.BGR
graphics.inc:88Constant PALETTE.RBG
VAL INT PALETTE.RBG
graphics.inc:89Constant PALETTE.BRG
VAL INT PALETTE.BRG
graphics.inc:90Constant PALETTE.GRB
VAL INT PALETTE.GRB
graphics.inc:91Constant PALETTE.GBR
VAL INT PALETTE.GBR
disc.occ:30Process fill.circle
PROC fill.circle (VAL INT x, y, r, VAL INT colour, [][]INT raster)
Draws a solid circle. Clips as necessary.
Parameters:
VAL INT |
x, y
|
Coordinates of centre |
VAL INT |
r |
Radius |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
arc.occ:33Process draw.arc
PROC draw.arc (VAL INT x.0, y.0, radius, VAL ANGLE t.0, t.1, VAL INT colour, [][]INT raster)
Draws a circular arc.
Parameters:
VAL INT |
x.0, y.0
|
Coordinates of centre |
VAL INT |
radius |
Radius |
VAL ANGLE |
t.0, t.1
|
Range of ANGLEs |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
arc.occ:39Process arc
PROC arc (VAL ANGLE t.0, t.1)
Basic PROC; arc <= ANGLE.RIGHT
Parameters:
VAL ANGLE |
t.0, t.1
|
Range of ANGLEs |
line.occ:37Process draw.line
PROC draw.line (INT x.0, y.0, VAL INT d.x, d.y, VAL INT c.0, c.1, [][]INT raster)
Draw a straight line.
Returns end point in (x.0, y.0).
Does nothing if (x.0, y.0) is outside raster.
Based on Foley & van Dam, Computer Graphics Principles and Practice, Second Edition in C, Fig. 3.8.
Parameters:
INT |
x.0, y.0
|
Starting point |
VAL INT |
d.x, d.y
|
Relative position of end point |
VAL INT |
c.0 |
Stop when line hits this colour |
VAL INT |
c.1 |
Draw in this colour ... |
[][]INT |
raster |
... on this raster |
colourspace.occ:34Function desaturate.colour
INT FUNCTION desaturate.colour (VAL INT colour, amount)
Desaturate a colour value.
This adds amount to each of the colour's components, capping them at #FF.
Parameters:
VAL INT |
colour |
Colour |
VAL INT |
amount |
Amount to add |
Returns:
INT |
The new colour |
colourspace.occ:69Function hsv.to.rgb
INT FUNCTION hsv.to.rgb (VAL REAL32 h, s, v)
Convert a colour from HSV to RGB.
The HSV colourspace specifies colour shades in terms of hue (basic colour), saturation and value (brightness), each a real value between 0 and 1. It's useful if you want to turn a continuous range of values into a smooth series of colours: fix the saturation and value and vary the hue.
This is an implementation of http://www.cs.rit.edu/~ncs/color/t_convert.html N. Schaller's algorithm.
Parameters:
VAL REAL32 |
h |
Hue |
VAL REAL32 |
s |
Saturation |
VAL REAL32 |
v |
Value |
Returns:
INT |
#rrggbb |
rectangle.occ:32Process fill.rectangle
PROC fill.rectangle (VAL INT x.0, y.0, w.0, h.0, VAL INT colour, [][]INT raster)
Draws a solid rectangle.
Clips as necessary.
Parameters:
VAL INT |
x.0, y.0
|
Top left corner |
VAL INT |
w.0 |
Width |
VAL INT |
h.0 |
Height/depth |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |
rectangle.occ:78Process fill.square
PROC fill.square (VAL INT x, y, s, VAL INT colour, [][]INT raster)
Draw a solid square.
dither.occ:28Function dither
INT FUNCTION dither (VAL INT n, i, j)
Dither
Parameters:
VAL INT |
n |
Order |
VAL INT |
i, j
|
Coordinates |
Returns:
INT |
Dither |
dither.occ:51Function undither
INT, INT FUNCTION undither (VAL INT n, k)
Reverse Dither
Parameters:
VAL INT |
n |
Order |
VAL INT |
k |
Count |
Returns:
INT |
i, j
|
Coordinates |
copy.occ:41Process copy.raster
PROC copy.raster (VAL [][]INT src, VAL INT x, y, c, f, [][]INT dst)
Copy one raster onto another.
One corner of src always maps to (x, y) of dst.
Let the least significant three bits of f be abc:
- a = 1: flip about
\, then - b = 1: flip about
| - c = 1: flip about
-
Hence
- f = 7: flip about
/
Parameters:
VAL [][]INT |
src |
Source raster |
VAL INT |
x, y
|
Top left of target in dst
|
VAL INT |
c |
Transparent colour -- don't copy |
VAL INT |
f |
Orientation |
[][]INT |
dst |
Destination raster |
copy.occ:143Process overwrite.raster
PROC overwrite.raster (VAL [][]INT src, VAL INT x, y, f, [][]INT dst)
cordic.occ:55Function CORDIC
INT, INT FUNCTION CORDIC (VAL INT X, Y, VAL ANGLE theta)
Parameters:
VAL INT |
X, Y
|
Coordinates of vector |
VAL ANGLE |
theta |
Angle |
Returns:
INT |
X, Y
|
Rotated through theta
|
cordic.occ:65Constant CORDIC.CONST
VAL INT CORDIC.CONST
Magic constant
cordic.occ:101Function CIDROC
INT, ANGLE FUNCTION CIDROC (VAL INT X, Y)
Inverse CORDIC algorithm; Converts Cartesian (X, Y) to polar coordinates.
Parameters:
VAL INT |
X, Y
|
Coordinate of vector |
Returns:
INT |
radius sqrt(X^2 + Y^2)
|
|
ANGLE |
angle arctan(Y/X)
|
cordic.occ:105Constant CORDIC.CONST
VAL INT CORDIC.CONST
Magic constant
wallpaper.occ:27Process draw.wallpaper
PROC draw.wallpaper (VAL [][]INT src, [][]INT dst)
Cover dst with copies of dst
Parameters:
VAL [][]INT |
src |
Source raster |
[][]INT |
dst |
Destination raster |
angle.inc:28Data type ANGLE
DATA TYPE ANGLE
ANGLE data type
An ANGLE is measured in units of 2^32 bits = 1 turn = 4 right angles = 2 pi radians = 360 degrees = 400 grades. Like times, angles wrap round without overflowing.
angle.inc:30Group ANGLE
constants
angle.inc:32Constant ANGLE.STRAIGHT
VAL ANGLE ANGLE.STRAIGHT
2^31 (exact)
angle.inc:33Constant ANGLE.RIGHT
VAL ANGLE ANGLE.RIGHT
2^30 (exact)
angle.inc:34Constant ANGLE.RADIAN
VAL ANGLE ANGLE.RADIAN
2^31 / pi (approx.)
angle.inc:35Constant ANGLE.DEGREE
VAL ANGLE ANGLE.DEGREE
2^32 / 360 (approx.)
angle.inc:38Constant ANGLE.GRADE
VAL ANGLE ANGLE.GRADE
2^32 / 400 (approx.)
angle.inc:48Operator + (ANGLE, ANGLE)
ANGLE INLINE FUNCTION "+" (VAL ANGLE X, Y)
Addition operator
Parameters:
VAL ANGLE |
X, Y
|
Operands |
Returns:
ANGLE |
X + Y |
angle.inc:49Operator - (ANGLE, ANGLE)
ANGLE INLINE FUNCTION "-" (VAL ANGLE X, Y)
angle.inc:50Operator * (ANGLE, INT)
ANGLE INLINE FUNCTION "**" (VAL ANGLE X, VAL INT Y)
angle.inc:51Operator * (INT, ANGLE)
ANGLE INLINE FUNCTION "**" (VAL INT X, VAL ANGLE Y)
angle.inc:52Operator / (ANGLE, INT)
ANGLE INLINE FUNCTION "/" (VAL ANGLE X, VAL INT Y)
angle.inc:53Operator - (ANGLE)
ANGLE INLINE FUNCTION "-" (VAL ANGLE X)
angle.inc:54Operator > (ANGLE, ANGLE)
BOOL INLINE FUNCTION ">" (VAL ANGLE X, Y)
angle.inc:55Operator < (ANGLE, ANGLE)
BOOL INLINE FUNCTION "<" (VAL ANGLE X, Y)
angle.inc:56Operator <= (ANGLE, ANGLE)
BOOL INLINE FUNCTION "<=" (VAL ANGLE X, Y)
angle.inc:57Operator >= (ANGLE, ANGLE)
BOOL INLINE FUNCTION ">=" (VAL ANGLE X, Y)
angle.inc:64Operator ~ (ANGLE)
ANGLE INLINE FUNCTION "~" (VAL ANGLE X)
Reverse operator
Parameters:
VAL ANGLE |
X |
Operands |
Returns:
ANGLE |
Opposite direction |
hit.occ:29Function circle.hits
BOOL FUNCTION circle.hits (VAL INT X, Y, radius, colour, VAL [][]INT raster)
Does circle hit anything?
Parameters:
VAL INT |
X, Y
|
Centre of circle |
VAL INT |
radius |
Radius |
VAL INT |
colour |
Colour of target |
VAL [][]INT |
raster |
Raster |
ellipse.occ:31Process fill.ellipse.radii
PROC fill.ellipse.radii (VAL INT x, y, a, b, VAL INT colour, [][]INT raster)
Draws a solid ellipse. Clips as necessary.
Parameters:
VAL INT |
x, y
|
Coordinates of centre |
VAL INT |
a, b
|
X and Y radii |
VAL INT |
colour |
Colour |
[][]INT |
raster |
Raster |