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