xref: /plan9/sys/src/cmd/gs/src/gxctable.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
17dd7cddfSDavid du Colombier /* Copyright (C) 1995, 1999 Aladdin Enterprises.  All rights reserved.
27dd7cddfSDavid du Colombier 
3*593dc095SDavid du Colombier   This software is provided AS-IS with no warranty, either express or
4*593dc095SDavid du Colombier   implied.
57dd7cddfSDavid du Colombier 
6*593dc095SDavid du Colombier   This software is distributed under license and may not be copied,
7*593dc095SDavid du Colombier   modified or distributed except as expressly authorized under the terms
8*593dc095SDavid du Colombier   of the license contained in the file LICENSE in this distribution.
97dd7cddfSDavid du Colombier 
10*593dc095SDavid du Colombier   For more information about licensing, please refer to
11*593dc095SDavid du Colombier   http://www.ghostscript.com/licensing/. For information on
12*593dc095SDavid du Colombier   commercial licensing, go to http://www.artifex.com/licensing/ or
13*593dc095SDavid du Colombier   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14*593dc095SDavid du Colombier   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
157dd7cddfSDavid du Colombier */
167dd7cddfSDavid du Colombier 
17*593dc095SDavid du Colombier /* $Id: gxctable.h,v 1.5 2002/06/16 08:45:43 lpd Exp $ */
187dd7cddfSDavid du Colombier /* Interface to color table lookup and interpolation */
197dd7cddfSDavid du Colombier 
207dd7cddfSDavid du Colombier #ifndef gxctable_INCLUDED
217dd7cddfSDavid du Colombier #  define gxctable_INCLUDED
227dd7cddfSDavid du Colombier 
237dd7cddfSDavid du Colombier #include "gxfixed.h"
247dd7cddfSDavid du Colombier #include "gxfrac.h"
257dd7cddfSDavid du Colombier 
267dd7cddfSDavid du Colombier /*
277dd7cddfSDavid du Colombier  * Define a 3- or 4-D color lookup table.
287dd7cddfSDavid du Colombier  * n is the number of dimensions (input indices), 3 or 4.
297dd7cddfSDavid du Colombier  * dims[0..n-1] are the table dimensions.
307dd7cddfSDavid du Colombier  * m is the number of output values, typically 3 (RGB) or 4 (CMYK).
317dd7cddfSDavid du Colombier  * For n = 3:
327dd7cddfSDavid du Colombier  *   table[i], 0 <= i < dims[0], point to strings of length
337dd7cddfSDavid du Colombier  *     dims[1] x dims[2] x m.
347dd7cddfSDavid du Colombier  * For n = 4:
357dd7cddfSDavid du Colombier  *   table[i], 0 <= i < dims[0] x dims[1], points to strings of length
367dd7cddfSDavid du Colombier  *     dims[2] x dims[3] x m.
377dd7cddfSDavid du Colombier  * It isn't really necessary to store the size of each string, since
387dd7cddfSDavid du Colombier  * they're all the same size, but it makes things a lot easier for the GC.
397dd7cddfSDavid du Colombier  */
407dd7cddfSDavid du Colombier typedef struct gx_color_lookup_table_s {
417dd7cddfSDavid du Colombier     int n;
427dd7cddfSDavid du Colombier     int dims[4];		/* [ndims] */
437dd7cddfSDavid du Colombier     int m;
447dd7cddfSDavid du Colombier     const gs_const_string *table;
457dd7cddfSDavid du Colombier } gx_color_lookup_table;
467dd7cddfSDavid du Colombier 
477dd7cddfSDavid du Colombier /*
487dd7cddfSDavid du Colombier  * Interpolate in a 3- or 4-D color lookup table.
497dd7cddfSDavid du Colombier  * pi[0..n-1] are the table indices, guaranteed to be in the ranges
507dd7cddfSDavid du Colombier  * [0..dims[n]-1] respectively.
517dd7cddfSDavid du Colombier  * Return interpolated values in pv[0..m-1].
527dd7cddfSDavid du Colombier  */
537dd7cddfSDavid du Colombier 
547dd7cddfSDavid du Colombier /* Return the nearest value without interpolation. */
55*593dc095SDavid du Colombier void gx_color_interpolate_nearest(const fixed * pi,
56*593dc095SDavid du Colombier 			    const gx_color_lookup_table * pclt, frac * pv);
577dd7cddfSDavid du Colombier 
587dd7cddfSDavid du Colombier /* Use trilinear interpolation. */
59*593dc095SDavid du Colombier void gx_color_interpolate_linear(const fixed * pi,
60*593dc095SDavid du Colombier 			    const gx_color_lookup_table * pclt, frac * pv);
617dd7cddfSDavid du Colombier 
627dd7cddfSDavid du Colombier #endif /* gxctable_INCLUDED */
63