gimp/app/base/threshold.c
Michael Natterer 1186e83a28 Color correction tool chopping:
2002-08-26  Michael Natterer  <mitch@gimp.org>

	Color correction tool chopping:

	* app/Makefile.am
	* app/image_map.[ch]: removed...

	* app/core/Makefile.am
	* app/core/core-types.h
	* app/core/gimpimagemap.[ch]: ...and added here as object.

	* app/base/Makefile.am
	* app/base/base-types.h
	* app/base/color-balance.[ch]
	* app/base/curves.[ch]
	* app/base/hue-saturation.[ch]
	* app/base/threshold.[ch]: the lowlevel color correction functions
	plus their parameter structs cut out of the resp. tools.

	* app/core/core-enums.[ch]: removed GimpTransferMode enum...

	* app/base/base-enums.[ch]: ...added it here. Also added
	GimpHueRange for the new hue-saturation files.

	* tools/pdbgen/enums.pl
	* libgimp/gimpenums.h
	* plug-ins/script-fu/script-fu-constants.c: regenerated.

	* app/tools/Makefile.am
	* app/tools/gimpcolorbalancetool-transfer.c: removed (code went
	to base/color-balance.c).

	* app/tools/gimpimagemaptool.[ch]: added most code which was
	diplicated in subclasses. Create the dialog here with a nice title
	bar including image preview and name (fixes #66033). Added virtual
	functions map(), dialog() and reset() which need to be implemented
	by subclasses.

	* app/tools/gimpbrightnesscontrasttool.[ch]
	* app/tools/gimpcolorbalancetool.[ch]
	* app/tools/gimpcurvestool.[ch]
	* app/tools/gimphuesaturationtool.[ch]
	* app/tools/gimplevelstool.[ch]
	* app/tools/gimpposterizetool.[ch]
	* app/tools/gimpthresholdtool.[ch]: removed tons of duplicated
	code and simply implement GimpImageMapTool's virtual functions.
	Removed all dialog structs and keep the variables in the tool
	structs. The dialogs are now created on-the-fly and destroyed when
	the tool goes away, which makes all callbacks much simpler and
	safer. Lots of GUI & code cleanup in all dialogs.

	* app/tools/gimpcurvestool.c
	* app/tools/gimplevelstool.c: added separate "Reset Channel"
	buttons and let the global "Reset" buttons reset all color
	channels.

	* app/tools/tools.c: the various antique foo_free() functions
	don't exist any more.

	* app/tools/gimphistogramtool.c: removed ImageMap field from
	dialog struct (it was unused). Cleaned up dialog a bit.

	* tools/pdbgen/Makefile.am: don't scan tools/gimphuesaturationtool.h
	for enums.

	* tools/pdbgen/pdb/color.pdb: use the new stuff from base/ and
	don't include stuff from tools/ any more.

	* app/pdb/color_cmds.c
	* app/pdb/paint_tools_cmds.c: regenerated.
2002-08-26 11:35:56 +00:00

89 lines
2.1 KiB
C

/* The GIMP -- an image manipulation program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* 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.
*/
#include "config.h"
#include <glib-object.h>
#include "base-types.h"
#include "pixel-region.h"
#include "threshold.h"
void
threshold_2 (gpointer data,
PixelRegion *srcPR,
PixelRegion *destPR)
{
threshold (srcPR, destPR, data);
}
void
threshold (PixelRegion *srcPR,
PixelRegion *destPR,
gpointer data)
{
Threshold *tr;
guchar *src, *s;
guchar *dest, *d;
gint has_alpha, alpha;
gint w, h, b;
gint value;
tr = (Threshold *) data;
h = srcPR->h;
src = srcPR->data;
dest = destPR->data;
has_alpha = (srcPR->bytes == 2 || srcPR->bytes == 4);
alpha = has_alpha ? srcPR->bytes - 1 : srcPR->bytes;
while (h--)
{
w = srcPR->w;
s = src;
d = dest;
while (w--)
{
if (tr->color)
{
value = MAX (s[RED_PIX], s[GREEN_PIX]);
value = MAX (value, s[BLUE_PIX]);
value = (value >= tr->low_threshold && value <= tr->high_threshold ) ? 255 : 0;
}
else
value = (s[GRAY_PIX] >= tr->low_threshold && s[GRAY_PIX] <= tr->high_threshold) ? 255 : 0;
for (b = 0; b < alpha; b++)
d[b] = value;
if (has_alpha)
d[alpha] = s[alpha];
s += srcPR->bytes;
d += destPR->bytes;
}
src += srcPR->rowstride;
dest += destPR->rowstride;
}
}