Fix color-rgb-to-hsl computation.
authorJulien Danjou <julien@danjou.info>
Thu, 19 Jan 2012 13:48:29 +0000 (14:48 +0100)
committerJulien Danjou <julien@danjou.info>
Tue, 24 Jan 2012 09:38:44 +0000 (10:38 +0100)
Signed-off-by: Julien Danjou <julien@danjou.info>
lisp/ChangeLog
lisp/color.el

index a9bb50e..351dcd4 100644 (file)
@@ -1,3 +1,7 @@
+2012-01-24  Julien Danjou  <julien@danjou.info>
+
+       * color.el (color-rgb-to-hsl): Fix value computing.
+
 2012-01-21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * mm-decode.el (mm-interactively-view-part): Fix prompt.
index 6fab613..fc306f5 100644 (file)
@@ -141,23 +141,21 @@ inclusive."
          (min (min r g b))
          (delta (- max min))
          (l (/ (+ max min) 2.0)))
-    (list
-     (if (< (- max min) 1e-8)
-         0
-       (* 2 float-pi
-          (/ (cond ((= max r)
-                    (+ (/ (- g b) delta) (if (< g b) 6 0)))
-                   ((= max g)
-                   (+ (/ (- b r) delta) 2))
-                   (t
-                    (+ (/ (- r g) delta) 4)))
-             6)))
-     (if (= max min)
-         0
-       (if (> l 0.5)
-           (/ delta (- 2 (+ max min)))
-         (/ delta (+ max min))))
-     l)))
+    (if (= delta 0)
+       (list 0.0 0.0 l)
+      (let* ((s (if (<= l 0.5) (/ delta (+ max min))
+                 (/ delta (- 2.0 max min))))
+            (rc (/ (- max r) delta))
+            (gc (/ (- max g) delta))
+            (bc (/ (- max b) delta))
+            (h  (mod
+                 (/
+                  (cond
+                   ((= r max)      (- bc gc))
+                   ((= g max)      (+ 2.0 rc (- bc)))
+                   (t              (+ 4.0 gc (- rc))))
+                  6.0) 1.0)))
+       (list h s l)))))
 
 (defun color-srgb-to-xyz (red green blue)
   "Convert RED GREEN BLUE colors from the sRGB color space to CIE XYZ.