INV_CMAP(3) 1 (Month DD, YYYY) INV_CMAP(3)
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
Page 1 (printed 12/1/98)
INV_CMAP(3) 1 (Month DD, YYYY) INV_CMAP(3)
Spencer W. Thomas
Page 2 (printed 12/1/98)