Re: [Gimp-developer] HSL patch

2007-01-11 Thread Robert L Krawitz
   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

Re: [Gimp-developer] HSL patch

2007-01-11 Thread Sven Neumann
Hi,

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?


Sven


___
Gimp-developer mailing list
Gimp-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer


Re: [Gimp-developer] HSL patch

2007-01-11 Thread Robert L Krawitz
   From: Sven Neumann <[EMAIL PROTECTED]>
   Date: Thu, 11 Jan 2007 08:22:20 +0100

   On Wed, 2007-01-10 at 06:53 -0500, Robert L Krawitz wrote:
   >From: Sven Neumann <[EMAIL PROTECTED]>
   >Date: Wed, 10 Jan 2007 08:53:02 +0100
   > 
   >can you explain to me why your patch introduces new functions in
   >libgimpcolor? Couldn't you just use the existing gimp_rgb_to_hsl()
   >and gimp_hsl_to_rgb()?
   > 
   > I did it the way I did to use the same implementation as the existing
   > compose_hsv() function.  In addition, it isn't clear to me why there
   > should be gimp_rgb_to_hsv4 but not gimp_rgb_to_hsl4.

   gimp_rgb_to_hsv4() is there for historical reasons. If we could, we
   would probably remove it from the API. I don't think we want to
   introduce a HSL variant of it now.

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.
___
Gimp-developer mailing list
Gimp-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer