bitmap - external format for bitmaps
Bitmaps are described in graphics(2). Fonts and bitmaps are stored in external files in
Bitmap files are read and written using rdbitmapfile and wrbitmapfile (see balloc(2)). A
bitmap file starts with 5 decimal strings: ldepth, r.min.x, r.min.y, r.max.x, and r.max.y.
Each number is right-justified and blank padded in 11 characters, followed by a blank.
The rest of the file contains the r.max.y-r.min.y rows of bitmap data. A row consists of
the byte containing pixel r.min.x and all the bytes up to and including the byte contain-
ing pixel r.max.x-1. A pixel with x-coordinate = x in a bitmap with ldepth = ld will
appear as w = 2^ld contiguous bits in a byte, with the pixel's high order bit starting at
the byte's bit number w*(x mod (8/w)), where bits within a byte are numbered 0 to 7 from
the high order to the low order bit. If w is greater than 8, it is a multiple of 8, so
pixel values take up an integral number of bytes. Rows contain integral number of bytes,
so there may be some unused pixels at either end of a row.
The rdbitmap and wrbitmap functions described in balloc(2) also deal with rows in this
format, stored in user memory.
Some small images, in particular 48x48 face files as used by seemail (see mail(1)) and
16x16 cursors, can be stored textually, suitable for inclusion in C source. Each line of
text represents one scan line as a comma-separated sequence of hexadecimal bytes, shorts,
or words in C format. For cursors, each line defines a pair of bytes. (It takes two
images to define a cursor; each must be stored separately to be processed by programs such
as tweak(1).) Face files of one bit per pixel are stored as a sequence of shorts, those
of larger pixel sizes as a sequence of longs. Software that reads these files must deduce
the image size from the input; there is no header. These formats reflect history rather
tweak(1), graphics(2), bitblt(2), balloc(2), face(6), font(6)