[babl] extensions: Make HSV works on perceptual color space



commit b5f62886a960a077b4e2873501e62d771849bc7c
Author: Téo Mazars <teo mazars ensimag fr>
Date:   Thu Jun 20 20:16:17 2013 +0200

    extensions: Make HSV works on perceptual color space

 extensions/HSV.c |   13 +++++++------
 tests/hsva.c     |   36 ++++++++++++++++++------------------
 2 files changed, 25 insertions(+), 24 deletions(-)
---
diff --git a/extensions/HSV.c b/extensions/HSV.c
index 6c66f42..67e489f 100644
--- a/extensions/HSV.c
+++ b/extensions/HSV.c
@@ -26,6 +26,7 @@
 #include <string.h>
 
 #include "babl.h"
+#include "base/util.h"
 
 #define MIN(a,b) (a > b) ? b : a;
 #define MAX(a,b) (a < b) ? b : a;
@@ -94,9 +95,9 @@ rgba_to_hsva (char *src,
 
   while (n--)
   {
-    double red   = ((double *) src)[0];
-    double green = ((double *) src)[1];
-    double blue  = ((double *) src)[2];
+    double red   = linear_to_gamma_2_2 (((double *) src)[0]);
+    double green = linear_to_gamma_2_2 (((double *) src)[1]);
+    double blue  = linear_to_gamma_2_2 (((double *) src)[2]);
     double alpha = ((double *) src)[3];
 
     double hue, saturation, value;
@@ -214,9 +215,9 @@ hsva_to_rgba (char *src,
     green += min;
     blue += min;
 
-    ((double *) dst)[0] = red;
-    ((double *) dst)[1] = green;
-    ((double *) dst)[2] = blue;
+    ((double *) dst)[0] = gamma_2_2_to_linear (red);
+    ((double *) dst)[1] = gamma_2_2_to_linear (green);
+    ((double *) dst)[2] = gamma_2_2_to_linear (blue);
     ((double *) dst)[3] = alpha;
 
     src += 4 * sizeof (double);
diff --git a/tests/hsva.c b/tests/hsva.c
index a973ea5..a29f506 100644
--- a/tests/hsva.c
+++ b/tests/hsva.c
@@ -60,24 +60,24 @@ main (int    argc,
 {
   int OK = 1;
 
-  float rgba[][4] = {{ 1.0,   1.0,   1.0,   1.0 },
-                     { 0.5,   0.5,   0.5,   1.0 },
-                     { 0.0,   0.0,   0.0,   1.0 },
-                     { 1.0,   0.0,   0.0,   1.0 },
-                     { 0.749, 0.75,  0.0,   1.0 },
-                     { 0.0,   0.5,   0.0,   1.0 },
-                     { 0.5,   1.0,   1.0,   1.0 },
-                     { 0.5,   0.5,   1.0,   1.0 },
-                     { 0.75,  0.25,  0.75,  1.0 },
-                     { 0.627, 0.643, 0.142, 1.0 },
-                     { 0.256, 0.104, 0.918, 1.0 },
-                     { 0.116, 0.675, 0.255, 1.0 },
-                     { 0.941, 0.783, 0.053, 1.0 },
-                     { 0.704, 0.187, 0.897, 1.0 },
-                     { 0.931, 0.463, 0.316, 1.0 },
-                     { 0.998, 0.974, 0.532, 1.0 },
-                     { 0.099, 0.795, 0.591, 1.0 },
-                     { 0.211, 0.149, 0.597, 1.0 }};
+  float rgba[][4] = {{ 1.0,    1.0,    1.0,    1.0 },
+                     { 0.2140, 0.2140, 0.2140, 1.0 },
+                     { 0,      0,      0,      1.0 },
+                     { 1,      0,      0,      1.0 },
+                     { 0.5209, 0.5225, 0,      1.0 },
+                     { 0,      0.2140, 0,      1.0 },
+                     { 0.2140, 1,      1,      1.0 },
+                     { 0.2140, 0.2140, 1,      1.0 },
+                     { 0.5215, 0.0508, 0.5225, 1.0 },
+                     { 0.3509, 0.3710, 0.0178, 1.0 },
+                     { 0.0533, 0.0106, 0.8235, 1.0 },
+                     { 0.0126, 0.4132, 0.0529, 1.0 },
+                     { 0.8709, 0.5754, 0.0042, 1.0 },
+                     { 0.4537, 0.0291, 0.7814, 1.0 },
+                     { 0.8501, 0.1813, 0.0814, 1.0 },
+                     { 0.9954, 0.9418, 0.2448, 1.0 },
+                     { 0.0099, 0.5953, 0.3081, 1.0 },
+                     { 0.0366, 0.0193, 0.3150, 1.0 }};
 
   float hsva[][4] = {{ 0.0,   0.0,   1.0,   1.0 },
                      { 0.0,   0.0,   0.5,   1.0 },


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]