gimplut.h 2.43 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/* The GIMP -- an image manipulation program
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
 *
 * gimplut.h: Copyright (C) 1999 Jay Cox <jaycox@earthlink.net>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef __GIMP_LUT_H__
#define __GIMP_LUT_H__

#include "pixel_region.h"

Sven Neumann's avatar
Sven Neumann committed
26

27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
/* TODO: the GimpLutFunc should really be passed the ColorModel of the region,
   not just the number of channels */
/* GimpLutFuncs should assume that the input and output gamma are 1.0
   and do no correction as this will be handled by gimp_lut_setup */ 
typedef float (*GimpLutFunc)(void *user_data, int nchannels,
			     int channel, float value);

GimpLut * gimp_lut_new         ();
void      gimp_lut_free        (GimpLut *lut);

void      gimp_lut_setup       (GimpLut *, GimpLutFunc,
				void *user_data,
				int nchannels);

/* gimp_lut_setup_exact is currently identical to gimp_lut_setup.  It
   however is guaranteed to never perform any interpolation or gamma
   correction on the lut */
void      gimp_lut_setup_exact (GimpLut *, GimpLutFunc,
				void *user_data,
				int nchannels);

void      gimp_lut_process     (GimpLut *lut,
				PixelRegion *srcPR,
				PixelRegion *destPR);

52 53 54 55 56
/* gimp_lut_process_inline is like gimp_lut_process except it uses a
   single PixelRegion as both the source and destination */
void      gimp_lut_process_inline(GimpLut *lut,
				  PixelRegion *src_destPR);

57 58 59 60 61 62 63 64 65 66
/* gimp_lut_process_2 is the same as gimp_lut_process but the lut
   perameter is last instead of first.  this is necesary because
   pixel_region_process_paralell sends the user_data as the 1st
   parameter, and the image_map functions send user_data as the last
   parameter */
void      gimp_lut_process_2  (PixelRegion *srcPR,
			       PixelRegion *destPR,
			       GimpLut *lut);

#endif /* __GIMP_LUT_H__ */