A library to handle bitmaps (uncompressed pixel rectangles). The smallest storage unit is 1 byte (thus bitmaps, in the literal sense of the word, are not supported).
Pixels are made out of one or more "components". These components
are also referred as "channels"; for example a color image could be made out
of three channels, the red, green and blue one. The components can be unsigned
bytes, words, dwords, or floats. The pixels are stored in horizontal order,
and the channels are interleaved: That is, the structure of an RGB image is
R0 G0 B0 R1 G1 B1 ....
Most of the library is indifferent to the meaning of different channels.
"Padding" refers to unused bytes at the end of each row. This is sometimes necessary because other software components want the rows aligned to machine word boundary, for example.
The library should be relatively fast (except where noted), but performance is not the primary goal (thus there is no inline assembly, no SSE, etc.; but the critical functions are coded in C).
There are both pure and IO versions of the API; you shouldn't mix
the two without taking special care.
This module re-exports the pure interface; if you want the IO one,