\section{Built-in Module \sectcode{imageop}}
\bimodindex{imageop}

The \code{imageop} module contains some useful operations on images.
It operates on images consisting of 8 or 32 bit pixels
stored in Python strings.  This is the same format as used
by \code{gl.lrectwrite} and the \code{imgfile} module.

The module defines the following variables and functions:

\renewcommand{\indexsubitem}{(in module imageop)}

\begin{excdesc}{error}
This exception is raised on all errors, such as unknown number of bits
per pixel, etc.
\end{excdesc}


\begin{funcdesc}{crop}{image\, psize\, width\, height\, x0\, y0\, x1\, y1}
Return the selected part of \var{image}, which should by
\var{width} by \var{height} in size and consist of pixels of
\var{psize} bytes. \var{x0}, \var{y0}, \var{x1} and \var{y1} are like
the \code{lrectread} parameters, i.e.\ the boundary is included in the
new image.  The new boundaries need not be inside the picture.  Pixels
that fall outside the old image will have their value set to zero.  If
\var{x0} is bigger than \var{x1} the new image is mirrored.  The same
holds for the y coordinates.
\end{funcdesc}

\begin{funcdesc}{scale}{image\, psize\, width\, height\, newwidth\, newheight}
Return \var{image} scaled to size \var{newwidth} by \var{newheight}.
No interpolation is done, scaling is done by simple-minded pixel
duplication or removal.  Therefore, computer-generated images or
dithered images will not look nice after scaling.
\end{funcdesc}

\begin{funcdesc}{tovideo}{image\, psize\, width\, height}
Run a vertical low-pass filter over an image.  It does so by computing
each destination pixel as the average of two vertically-aligned source
pixels.  The main use of this routine is to forestall excessive
flicker if the image is displayed on a video device that uses
interlacing, hence the name.
\end{funcdesc}

\begin{funcdesc}{grey2mono}{image\, width\, height\, threshold}
Convert a 8-bit deep greyscale image to a 1-bit deep image by
tresholding all the pixels.  The resulting image is tightly packed and
is probably only useful as an argument to \code{mono2grey}.
\end{funcdesc}

\begin{funcdesc}{dither2mono}{image\, width\, height}
Convert an 8-bit greyscale image to a 1-bit monochrome image using a
(simple-minded) dithering algorithm.
\end{funcdesc}

\begin{funcdesc}{mono2grey}{image\, width\, height\, p0\, p1}
Convert a 1-bit monochrome image to an 8 bit greyscale or color image.
All pixels that are zero-valued on input get value \var{p0} on output
and all one-value input pixels get value \var{p1} on output.  To
convert a monochrome black-and-white image to greyscale pass the
values \code{0} and \code{255} respectively.
\end{funcdesc}

\begin{funcdesc}{grey2grey4}{image\, width\, height}
Convert an 8-bit greyscale image to a 4-bit greyscale image without
dithering.
\end{funcdesc}

\begin{funcdesc}{grey2grey2}{image\, width\, height}
Convert an 8-bit greyscale image to a 2-bit greyscale image without
dithering.
\end{funcdesc}

\begin{funcdesc}{dither2grey2}{image\, width\, height}
Convert an 8-bit greyscale image to a 2-bit greyscale image with
dithering.  As for \code{dither2mono}, the dithering algorithm is
currently very simple.
\end{funcdesc}

\begin{funcdesc}{grey42grey}{image\, width\, height}
Convert a 4-bit greyscale image to an 8-bit greyscale image.
\end{funcdesc}

\begin{funcdesc}{grey22grey}{image\, width\, height}
Convert a 2-bit greyscale image to an 8-bit greyscale image.
\end{funcdesc}
