NAME
inv_cmap - efficiently compute an inverse
colormap
SYNOPSIS
void inv_cmap( colors, colormap, bits, dist_buf, rgbmap ) int colors,
bits;
unsigned char *colormap[3], *rgbmap;
unsigned long *dist_buf;
DESCRIPTION
Inv_cmap computes an inverse colormap to
translate an RGB color to the nearest color
in the given colormap. The arguments are
colors
The number of colors in the input
colormap. Must be 256.
colormap
The input colormap. The ith color is
(Colormap[0][i], Colormap[1][i],
Colormap[2][i]).
bits Controls the size and precision of the
inverse colormap. The resulting
colormap will be a cube 2^bits on a
side, and will therefore contain
2^(3*bits) entries. RGB colors must be
quantized to bits bits before using the
inverse colormap.
dist_buf
Temporary storage used by inv_cmap. It
should contain at least 2^(3*bits)
elements.
rgbmap
The inverse colormap. Should be
allocated with at least 2^(3*bits)
elements. After calling inv_cmap, an
RGB color (r,g,b) can be mapped to its
closest representative in colormap by
evaluating
#define quantize(p) ((p)>>(8-bits))
rgbmap[ (((quantize(r) << bits) |
quantize(g)) << bits) | quantize(b) ]
Predicted performance is
O(2^(3*bits)*log(colors)). The measured
performance is sublinear (but not as good as
log) in the number of input colors and also
in the size of the output inverse colormap.
(I.e., it goes up more slowly than
2^(3*bits).)
SEE ALSO
colorquant(3).
AUTHOR
Spencer W. Thomas
9