From: Sven Neumann <[EMAIL PROTECTED]>
Date: Thu, 11 Jan 2007 18:55:44 +0100
On Thu, 2007-01-11 at 07:23 -0500, Robert L Krawitz wrote:
> I'll try to get to it tonight, although I think it would be
> useful to have the floating point version also -- if someone's
> writing a plugin that's doing multiple transformations, it keeps
> more precision to do the math in floating point vs. with chars.
> In this case, I suggest that the other floating point variants
> should be marked deprecated.
But gimp_rgb_to_hsl() and gimp_hsl_to_rgb() are floating point
versions. What's your point?
Uh, maybe that I didn't look closely enough :-? Here's an updated
patch.
BTW, in the process of preparing this diff, I notice that the tarball
contains devel-docs/app/Makefile, which almost surely it shouldn't.
diff -ru src/gimp-2.3.13/plug-ins/common/compose.c
sandbox/gimp-2.3.13/plug-ins/common/compose.c
--- src/gimp-2.3.13/plug-ins/common/compose.c 2006-09-01 07:14:34.0
-0400
+++ sandbox/gimp-2.3.13/plug-ins/common/compose.c 2007-01-11
20:56:22.0 -0500
@@ -93,6 +93,11 @@
gint numpix,
guchar *dst,
gboolean dst_has_alpha);
+static void compose_hsl (guchar **src,
+ gint*incr,
+ gint numpix,
+ guchar *dst,
+ gboolean dst_has_alpha);
static void compose_cmy (guchar **src,
gint*incr,
gint numpix,
@@ -211,6 +216,14 @@
{ NULL, NULL, NULL, NULL },
"hsv-compose", compose_hsv },
+ { N_("HSL"), 3,
+{ N_("_Hue:"),
+ N_("_Saturation:"),
+ N_("_Lightness:"),
+ NULL },
+{ NULL, NULL, NULL, NULL },
+"hsl-compose", compose_hsl },
+
{ N_("CMY"), 3,
{ N_("_Cyan:"),
N_("_Magenta:"),
@@ -337,7 +350,7 @@
{ GIMP_PDB_IMAGE,"image2", "Second input image" },
{ GIMP_PDB_IMAGE,"image3", "Third input image" },
{ GIMP_PDB_IMAGE,"image4", "Fourth input image" },
-{ GIMP_PDB_STRING, "compose-type", "What to compose: RGB, RGBA, HSV,
CMY, CMYK" },
+{ GIMP_PDB_STRING, "compose-type", "What to compose: RGB, RGBA, HSV,
HSL, CMY, CMYK" },
{ GIMP_PDB_INT8, "value1", "Mask value if image 1 is -1" },
{ GIMP_PDB_INT8, "value2", "Mask value if image 2 is -1" },
{ GIMP_PDB_INT8, "value3", "Mask value if image 3 is -1" },
@@ -357,7 +370,7 @@
{ GIMP_PDB_DRAWABLE, "drawable2","Second input drawable" },
{ GIMP_PDB_DRAWABLE, "drawable3","Third input drawable" },
{ GIMP_PDB_DRAWABLE, "drawable4","Fourth input drawable" },
-{ GIMP_PDB_STRING, "compose-type", "What to compose: RGB, RGBA, HSV,
CMY, CMYK" },
+{ GIMP_PDB_STRING, "compose-type", "What to compose: RGB, RGBA, HSV,
HSL, CMY, CMYK" },
{ GIMP_PDB_INT8, "value1", "Mask value if image 1 is -1" },
{ GIMP_PDB_INT8, "value2", "Mask value if image 2 is -1" },
{ GIMP_PDB_INT8, "value3", "Mask value if image 3 is -1" },
@@ -1035,6 +1048,44 @@
static void
+compose_hsl (guchar **src,
+ gint*incr_src,
+ gint numpix,
+ guchar *dst,
+ gboolean dst_has_alpha)
+{
+ register const guchar *hue_src = src[0];
+ register const guchar *sat_src = src[1];
+ register const guchar *lum_src = src[2];
+ register guchar *rgb_dst = dst;
+ register gintcount = numpix;
+ gint hue_incr = incr_src[0];
+ gint sat_incr = incr_src[1];
+ gint lum_incr = incr_src[2];
+ GimpHSL hsl;
+ GimpRGB rgb;
+
+ while (count-- > 0)
+{
+ hsl.h = (gdouble) *hue_src / 255.0;
+ hsl.s = (gdouble) *sat_src / 255.0;
+ hsl.l = (gdouble) *lum_src / 255.0;
+ gimp_hsl_to_rgb (&hsl, &rgb);
+ rgb_dst[0] = (guchar) (rgb.r * 255.999);
+ rgb_dst[1] = (guchar) (rgb.g * 255.999);
+ rgb_dst[2] = (guchar) (rgb.b * 255.999);
+ rgb_dst += 3;
+ hue_src += hue_incr;
+ sat_src += sat_incr;
+ lum_src += lum_incr;
+
+ if (dst_has_alpha)
+rgb_dst++;
+}
+}
+
+
+static void
compose_cmy (guchar **src,
gint*incr_src,
gint numpix,
diff -ru src/gimp-2.3.13/plug-ins/common/decompose.c
sandbox/gimp-2.3.13/plug-ins/common/decompose.c
--- src/gimp-2.3.13/plug-ins/common/decompose.c 2006-06-27 06:33:49.0
-0400
+++ sandbox/gimp-2.3.13/plug-ins/common/decompose.c 2007-01-11
20:55:51.0 -0500
@@ -100,12 +100,20 @@
gint bpp, gint numpix, guchar **dst);
static void extract_hsv (co