[babl/wip/pippin/inverted-cmyk] cmyk: add capitalized model and components, where 1 is black



commit 2242478371205dcf3351d762672748def5d9c01c
Author: Øyvind Kolås <pippin gimp org>
Date:   Tue Nov 20 02:11:02 2018 +0100

    cmyk: add capitalized model and components, where 1 is black
    
    and rearrange order of code to simplify adding more

 extensions/CMYK.c | 1119 +++++++++++++++++++++++++++--------------------------
 1 file changed, 568 insertions(+), 551 deletions(-)
---
diff --git a/extensions/CMYK.c b/extensions/CMYK.c
index 5925b40..711284b 100644
--- a/extensions/CMYK.c
+++ b/extensions/CMYK.c
@@ -32,340 +32,254 @@
 #include "babl.h"
 #include "base/util.h"
 
-static void  rgba_to_cmykA (const Babl *conversion,char *src,
-                            char *dst,
-                            long  n);
+static void
+rgba_to_cmykA (const Babl *conversion,char *src,
+               char *dst,
+               long  n)
+{
+  while (n--)
+    {
+      double red   = (((double *) src)[0]);
+      double green = (((double *) src)[1]);
+      double blue  = (((double *) src)[2]);
+      double alpha = ((double *) src)[3];
 
-static void  cmykA_to_rgba (const Babl *conversion,char *src,
-                            char *dst,
-                            long  n);
+      double cyan, magenta, yellow, key;
 
-static void  rgba_to_cmyka (const Babl *conversion,char *src,
-                            char *dst,
-                            long  n);
+      double pullout = 1.0;
 
-static void  cmyka_to_rgba (const Babl *conversion,char *src,
-                            char *dst,
-                            long  n);
+      cyan    = 1.0 - red;
+      magenta = 1.0 - green;
+      yellow  = 1.0 - blue;
 
-static void  rgba_to_cmyk (const Babl *conversion,char *src,
-                           char *dst,
-                           long  n);
+      key = 1.0;
+      if (cyan < key) key = cyan;
+      if (magenta < key) key = magenta;
+      if (yellow < key) key = yellow;
 
-static void  cmyk_to_rgba (const Babl *conversion,char *src,
-                           char *dst,
-                           long  n);
+      key *= pullout;
 
-static void  rgba_to_cmy  (const Babl *conversion,char *src,
-                           char *dst,
-                           long  n);
+      if (key < 1.0)
+        {
+          cyan    = (cyan - key)    / (1.0 - key);
+          magenta = (magenta - key) / (1.0 - key);
+          yellow  = (yellow - key)  / (1.0 - key);
+        }
+      else
+        {
+          cyan    = 0.0;
+          magenta = 0.0;
+          yellow  = 0.0;
+        }
 
-static void  cmy_to_rgba  (const Babl *conversion,char *src,
-                           char *dst,
-                           long  n);
+      ((double *) dst)[0] = (1.0-cyan) * alpha;
+      ((double *) dst)[1] = (1.0-magenta) * alpha;
+      ((double *) dst)[2] = (1.0-yellow) * alpha;
+      ((double *) dst)[3] = (1.0-key) * alpha;
+      ((double *) dst)[4] = alpha;
 
+      src += 4 * sizeof (double);
+      dst += 5 * sizeof (double);
+    }
+}
 
 static void
-cmyk_to_cmyka (const Babl *conversion,char *src,
-               char *dst,
-               long  n);
+cmyka_to_cmykA (const Babl *conversion,char *src,
+                char *dst,
+                long  n)
+{
+  while (n--)
+    {
+      double cyan    = ((double *) src)[0];
+      double magenta = ((double *) src)[1];
+      double yellow  = ((double *) src)[2];
+      double key     = ((double *) src)[3];
+      double alpha   = ((double *) src)[4];
+
+      ((double *) dst)[0] = (cyan)    * alpha;
+      ((double *) dst)[1] = (magenta) * alpha;
+      ((double *) dst)[2] = (yellow)  * alpha;
+      ((double *) dst)[3] = (key)     * alpha;
+      ((double *) dst)[4] = alpha;
+
+      src += 5 * sizeof (double);
+      dst += 5 * sizeof (double);
+    }
+}
 
 static void
-cmyka_to_cmyk (const Babl *conversion,char *src,
+cmykA_to_rgba (const Babl *conversion,char *src,
                char *dst,
-               long  n);
+               long  n)
+{
+  while (n--)
+    {
+      double alpha   = ((double *) src)[4];
+      double ralpha  = alpha>0.000001?1.0/alpha:0.0;
+      double cyanI   = ((double *) src)[0] * ralpha;
+      double magentaI= ((double *) src)[1] * ralpha;
+      double yellowI = ((double *) src)[2] * ralpha;
+      double keyI    = ((double *) src)[3] * ralpha;
+
+      double cyan    = 1.0-cyanI;
+      double magenta = 1.0-magentaI;
+      double yellow  = 1.0-yellowI;
+      double key     = 1.0-keyI;
+
+      double red, green, blue;
+
+      if (key < 1.0)
+        {
+          cyan    = cyan * (1.0 - key) + key;
+          magenta = magenta * (1.0 - key) + key;
+          yellow  = yellow * (1.0 - key) + key;
+        }
+      else
+        {
+          cyan = magenta = yellow = 1.0;
+        }
+
+      red   = 1.0 - cyan;
+      green = 1.0 - magenta;
+      blue  = 1.0 - yellow;
+
+      ((double *) dst)[0] = (red);
+      ((double *) dst)[1] = (green);
+      ((double *) dst)[2] = (blue);
+      ((double *) dst)[3] = alpha;
+
+      src += 5 * sizeof (double);
+      dst += 4 * sizeof (double);
+    }
+}
 
 static void
 cmykA_to_cmyka (const Babl *conversion,char *src,
-                    char *dst,
-                    long  n);
+                char *dst,
+                long  n)
+{
+  while (n--)
+    {
+      double alpha   = ((double *) src)[4];
+      double ralpha  = alpha>0.000001?1.0/alpha:0.0;
+      double cyan   = ((double *) src)[0] * ralpha;
+      double magenta= ((double *) src)[1] * ralpha;
+      double yellow = ((double *) src)[2] * ralpha;
+      double key    = ((double *) src)[3] * ralpha;
 
-static void
-cmyka_to_cmykA(const Babl *conversion,char *src,
-               char *dst,
-               long  n);
+      ((double *) dst)[0] = cyan;
+      ((double *) dst)[1] = magenta;
+      ((double *) dst)[2] = yellow;
+      ((double *) dst)[3] = key;
+      ((double *) dst)[4] = alpha;
 
-int init (void);
+      src += 5 * sizeof (double);
+      dst += 5 * sizeof (double);
+    }
+}
 
-int
-init (void)
+
+static void
+rgba_to_cmyka (const Babl *conversion,char *src,
+               char *dst,
+               long  n)
 {
-  babl_component_new ("cyan", NULL);
-  babl_component_new ("yellow", NULL);
-  babl_component_new ("magenta", NULL);
-  babl_component_new ("key", NULL);
+  while (n--)
+    {
+      double red   = (((double *) src)[0]);
+      double green = (((double *) src)[1]);
+      double blue  = (((double *) src)[2]);
+      double alpha = ((double *) src)[3];
 
+      double cyan, magenta, yellow, key;
 
-  babl_component_new ("ca", NULL);
-  babl_component_new ("ma", NULL);
-  babl_component_new ("ya", NULL);
-  babl_component_new ("ka", NULL);
+      double pullout = 1.0;
 
+      cyan    = 1.0 - red;
+      magenta = 1.0 - green;
+      yellow  = 1.0 - blue;
 
-  babl_model_new (
-    "name", "camayakaA",
-    babl_component ("ca"),
-    babl_component ("ma"),
-    babl_component ("ya"),
-    babl_component ("ka"),
-    babl_component ("A"),
-    NULL
-  );
+      key = 1.0;
+      if (cyan < key) key = cyan;
+      if (magenta < key) key = magenta;
+      if (yellow < key) key = yellow;
 
-  babl_model_new (
-    "name", "cmykA",
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    babl_component ("A"),
-    NULL
-  );
-  babl_model_new (
-    "name", "cmyk",
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    NULL
-  );
-  babl_model_new (
-    "name", "cmy",
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    NULL
-  );
+      key *= pullout;
 
+      if (key < 1.0)
+        {
+          cyan    = (cyan - key)    / (1.0 - key);
+          magenta = (magenta - key) / (1.0 - key);
+          yellow  = (yellow - key)  / (1.0 - key);
+        }
+      else
+        {
+          cyan    = 0.0;
+          magenta = 0.0;
+          yellow  = 0.0;
+        }
 
-  babl_conversion_new (
-    babl_model ("cmykA"),
-    babl_model ("cmyk"),
-    "linear", cmyka_to_cmyk,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("cmyk"),
-    babl_model ("cmykA"),
-    "linear", cmyk_to_cmyka,
-    NULL
-  );
+      ((double *) dst)[0] = 1.0-cyan;
+      ((double *) dst)[1] = 1.0-magenta;
+      ((double *) dst)[2] = 1.0-yellow;
+      ((double *) dst)[3] = 1.0-key;
+      ((double *) dst)[4] = alpha;
 
+      src += 4 * sizeof (double);
+      dst += 5 * sizeof (double);
+    }
+}
 
-  babl_conversion_new (
-    babl_model ("cmykA"),
-    babl_model ("camayakaA"),
-    "linear", cmyka_to_cmykA,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("camayakaA"),
-    babl_model ("cmykA"),
-    "linear", cmykA_to_cmyka,
-    NULL
-  );
+static void
+cmyka_to_rgba (const Babl *conversion,char *src,
+               char *dst,
+               long  n)
+{
+  while (n--)
+    {
+      double cyan    = 1.0-((double *) src)[0];
+      double magenta = 1.0-((double *) src)[1];
+      double yellow  = 1.0-((double *) src)[2];
+      double key     = 1.0-((double *) src)[3];
+      double alpha   = ((double *) src)[4];
 
+      double red, green, blue;
 
-  babl_conversion_new (
-    babl_model ("RGBA"),
-    babl_model ("camayakaA"),
-    "linear", rgba_to_cmykA,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("camayakaA"),
-    babl_model ("RGBA"),
-    "linear", cmykA_to_rgba,
-    NULL
-  );
-
-  babl_conversion_new (
-    babl_model ("RGBA"),
-    babl_model ("cmykA"),
-    "linear", rgba_to_cmyka,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("cmykA"),
-    babl_model ("RGBA"),
-    "linear", cmyka_to_rgba,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("RGBA"),
-    babl_model ("cmyk"),
-    "linear", rgba_to_cmyk,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("cmyk"),
-    babl_model ("RGBA"),
-    "linear", cmyk_to_rgba,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("cmyk"),
-    babl_model ("cmykA"),
-    "linear", cmyk_to_cmyka,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("RGBA"),
-    babl_model ("cmy"),
-    "linear", rgba_to_cmy,
-    NULL
-  );
-  babl_conversion_new (
-    babl_model ("cmy"),
-    babl_model ("RGBA"),
-    "linear", cmy_to_rgba,
-    NULL
-  );
-
-  babl_format_new (
-    "name", "camayakaA float",
-    babl_model ("camayakaA"),
-    babl_type ("float"),
-    babl_component ("ca"),
-    babl_component ("ma"),
-    babl_component ("ya"),
-    babl_component ("ka"),
-    babl_component ("A"),
-    NULL
-  );
-
-  babl_format_new (
-    "name", "cmykA float",
-    babl_model ("cmykA"),
-    babl_type ("float"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    babl_component ("A"),
-    NULL
-  );
-  babl_format_new (
-    "name", "cmyk float",
-    babl_model ("cmyk"),
-    babl_type ("float"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    NULL
-  );
-  babl_format_new (
-    "name", "cmy float",
-    babl_model ("cmy"),
-    babl_type ("float"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    NULL
-  );
-
-  babl_format_new (
-    "name", "cmyk u8",
-    babl_model ("cmyk"),
-    babl_type ("u8"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    NULL
-  );
-  babl_format_new (
-    "name", "cmykA u8",
-    babl_model ("cmykA"),
-    babl_type ("u8"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    babl_component ("A"),
-    NULL
-  );
+      if (key < 1.0)
+        {
+          cyan    = cyan * (1.0 - key) + key;
+          magenta = magenta * (1.0 - key) + key;
+          yellow  = yellow * (1.0 - key) + key;
+        }
+      else
+        {
+          cyan = magenta = yellow = 1.0;
+        }
 
-  babl_format_new (
-    "name", "cmyk u16",
-    babl_model ("cmyk"),
-    babl_type ("u8"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    NULL
-  );
-  babl_format_new (
-    "name", "cmykA u16",
-    babl_model ("cmykA"),
-    babl_type ("u16"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    babl_component ("A"),
-    NULL
-  );
-  babl_format_new (
-    "name", "cmyk u32",
-    babl_model ("cmyk"),
-    babl_type ("u8"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    NULL
-  );
-  babl_format_new (
-    "name", "cmykA u32",
-    babl_model ("cmykA"),
-    babl_type ("u32"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    babl_component ("A"),
-    NULL
-  );
+      red   = 1.0 - cyan;
+      green = 1.0 - magenta;
+      blue  = 1.0 - yellow;
 
-  babl_format_new (
-    "name", "cmyk float",
-    babl_model ("cmyk"),
-    babl_type ("float"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    NULL
-  );
-  babl_format_new (
-    "name", "cmykA float",
-    babl_model ("cmykA"),
-    babl_type ("float"),
-    babl_component ("cyan"),
-    babl_component ("magenta"),
-    babl_component ("yellow"),
-    babl_component ("key"),
-    babl_component ("A"),
-    NULL
-  );
+      ((double *) dst)[0] = (red);
+      ((double *) dst)[1] = (green);
+      ((double *) dst)[2] = (blue);
+      ((double *) dst)[3] = alpha;
 
-  return 0;
+      src += 5 * sizeof (double);
+      dst += 4 * sizeof (double);
+    }
 }
 
 static void
-rgba_to_cmykA (const Babl *conversion,char *src,
-               char *dst,
-               long  n)
+rgba_to_cmyk (const Babl *conversion,char *src,
+              char *dst,
+              long  n)
 {
   while (n--)
     {
       double red   = (((double *) src)[0]);
       double green = (((double *) src)[1]);
       double blue  = (((double *) src)[2]);
-      double alpha = ((double *) src)[3];
 
       double cyan, magenta, yellow, key;
 
@@ -395,277 +309,40 @@ rgba_to_cmykA (const Babl *conversion,char *src,
           yellow  = 0.0;
         }
 
-      ((double *) dst)[0] = (1.0-cyan) * alpha;
-      ((double *) dst)[1] = (1.0-magenta) * alpha;
-      ((double *) dst)[2] = (1.0-yellow) * alpha;
-      ((double *) dst)[3] = (1.0-key) * alpha;
-      ((double *) dst)[4] = alpha;
+      ((double *) dst)[0] = 1.0-cyan;
+      ((double *) dst)[1] = 1.0-magenta;
+      ((double *) dst)[2] = 1.0-yellow;
+      ((double *) dst)[3] = 1.0-key;
 
       src += 4 * sizeof (double);
-      dst += 5 * sizeof (double);
+      dst += 4 * sizeof (double);
     }
 }
 
 static void
-cmyka_to_cmykA (const Babl *conversion,char *src,
-                char *dst,
-                long  n)
+cmyk_to_rgba (const Babl *conversion,char *src,
+              char *dst,
+              long  n)
 {
   while (n--)
     {
-      double cyan    = ((double *) src)[0];
-      double magenta = ((double *) src)[1];
-      double yellow  = ((double *) src)[2];
-      double key     = ((double *) src)[3];
-      double alpha   = ((double *) src)[4];
+      double cyan    = 1.0-((double *) src)[0];
+      double magenta = 1.0-((double *) src)[1];
+      double yellow  = 1.0-((double *) src)[2];
+      double key     = 1.0-((double *) src)[3];
 
-      ((double *) dst)[0] = (cyan)    * alpha;
-      ((double *) dst)[1] = (magenta) * alpha;
-      ((double *) dst)[2] = (yellow)  * alpha;
-      ((double *) dst)[3] = (key)     * alpha;
-      ((double *) dst)[4] = alpha;
+      double red, green, blue;
 
-      src += 5 * sizeof (double);
-      dst += 5 * sizeof (double);
-    }
-}
-
-static void
-cmykA_to_rgba (const Babl *conversion,char *src,
-               char *dst,
-               long  n)
-{
-  while (n--)
-    {
-      double alpha   = ((double *) src)[4];
-      double ralpha  = alpha>0.000001?1.0/alpha:0.0;
-      double cyanI   = ((double *) src)[0] * ralpha;
-      double magentaI= ((double *) src)[1] * ralpha;
-      double yellowI = ((double *) src)[2] * ralpha;
-      double keyI    = ((double *) src)[3] * ralpha;
-
-      double cyan    = 1.0-cyanI;
-      double magenta = 1.0-magentaI;
-      double yellow  = 1.0-yellowI;
-      double key     = 1.0-keyI;
-
-      double red, green, blue;
-
-      if (key < 1.0)
-        {
-          cyan    = cyan * (1.0 - key) + key;
-          magenta = magenta * (1.0 - key) + key;
-          yellow  = yellow * (1.0 - key) + key;
-        }
-      else
-        {
-          cyan = magenta = yellow = 1.0;
-        }
-
-      red   = 1.0 - cyan;
-      green = 1.0 - magenta;
-      blue  = 1.0 - yellow;
-
-      ((double *) dst)[0] = (red);
-      ((double *) dst)[1] = (green);
-      ((double *) dst)[2] = (blue);
-      ((double *) dst)[3] = alpha;
-
-      src += 5 * sizeof (double);
-      dst += 4 * sizeof (double);
-    }
-}
-
-static void
-cmykA_to_cmyka (const Babl *conversion,char *src,
-                char *dst,
-                long  n)
-{
-  while (n--)
-    {
-      double alpha   = ((double *) src)[4];
-      double ralpha  = alpha>0.000001?1.0/alpha:0.0;
-      double cyan   = ((double *) src)[0] * ralpha;
-      double magenta= ((double *) src)[1] * ralpha;
-      double yellow = ((double *) src)[2] * ralpha;
-      double key    = ((double *) src)[3] * ralpha;
-
-      ((double *) dst)[0] = cyan;
-      ((double *) dst)[1] = magenta;
-      ((double *) dst)[2] = yellow;
-      ((double *) dst)[3] = key;
-      ((double *) dst)[4] = alpha;
-
-      src += 5 * sizeof (double);
-      dst += 5 * sizeof (double);
-    }
-}
-
-
-static void
-rgba_to_cmyka (const Babl *conversion,char *src,
-               char *dst,
-               long  n)
-{
-  while (n--)
-    {
-      double red   = (((double *) src)[0]);
-      double green = (((double *) src)[1]);
-      double blue  = (((double *) src)[2]);
-      double alpha = ((double *) src)[3];
-
-      double cyan, magenta, yellow, key;
-
-      double pullout = 1.0;
-
-      cyan    = 1.0 - red;
-      magenta = 1.0 - green;
-      yellow  = 1.0 - blue;
-
-      key = 1.0;
-      if (cyan < key) key = cyan;
-      if (magenta < key) key = magenta;
-      if (yellow < key) key = yellow;
-
-      key *= pullout;
-
-      if (key < 1.0)
-        {
-          cyan    = (cyan - key)    / (1.0 - key);
-          magenta = (magenta - key) / (1.0 - key);
-          yellow  = (yellow - key)  / (1.0 - key);
-        }
-      else
-        {
-          cyan    = 0.0;
-          magenta = 0.0;
-          yellow  = 0.0;
-        }
-
-      ((double *) dst)[0] = 1.0-cyan;
-      ((double *) dst)[1] = 1.0-magenta;
-      ((double *) dst)[2] = 1.0-yellow;
-      ((double *) dst)[3] = 1.0-key;
-      ((double *) dst)[4] = alpha;
-
-      src += 4 * sizeof (double);
-      dst += 5 * sizeof (double);
-    }
-}
-
-static void
-cmyka_to_rgba (const Babl *conversion,char *src,
-               char *dst,
-               long  n)
-{
-  while (n--)
-    {
-      double cyan    = 1.0-((double *) src)[0];
-      double magenta = 1.0-((double *) src)[1];
-      double yellow  = 1.0-((double *) src)[2];
-      double key     = 1.0-((double *) src)[3];
-      double alpha   = ((double *) src)[4];
-
-      double red, green, blue;
-
-      if (key < 1.0)
-        {
-          cyan    = cyan * (1.0 - key) + key;
-          magenta = magenta * (1.0 - key) + key;
-          yellow  = yellow * (1.0 - key) + key;
-        }
-      else
-        {
-          cyan = magenta = yellow = 1.0;
-        }
-
-      red   = 1.0 - cyan;
-      green = 1.0 - magenta;
-      blue  = 1.0 - yellow;
-
-      ((double *) dst)[0] = (red);
-      ((double *) dst)[1] = (green);
-      ((double *) dst)[2] = (blue);
-      ((double *) dst)[3] = alpha;
-
-      src += 5 * sizeof (double);
-      dst += 4 * sizeof (double);
-    }
-}
-
-static void
-rgba_to_cmyk (const Babl *conversion,char *src,
-              char *dst,
-              long  n)
-{
-  while (n--)
-    {
-      double red   = (((double *) src)[0]);
-      double green = (((double *) src)[1]);
-      double blue  = (((double *) src)[2]);
-
-      double cyan, magenta, yellow, key;
-
-      double pullout = 1.0;
-
-      cyan    = 1.0 - red;
-      magenta = 1.0 - green;
-      yellow  = 1.0 - blue;
-
-      key = 1.0;
-      if (cyan < key) key = cyan;
-      if (magenta < key) key = magenta;
-      if (yellow < key) key = yellow;
-
-      key *= pullout;
-
-      if (key < 1.0)
-        {
-          cyan    = (cyan - key)    / (1.0 - key);
-          magenta = (magenta - key) / (1.0 - key);
-          yellow  = (yellow - key)  / (1.0 - key);
-        }
-      else
-        {
-          cyan    = 0.0;
-          magenta = 0.0;
-          yellow  = 0.0;
-        }
-
-      ((double *) dst)[0] = 1.0-cyan;
-      ((double *) dst)[1] = 1.0-magenta;
-      ((double *) dst)[2] = 1.0-yellow;
-      ((double *) dst)[3] = 1.0-key;
-
-      src += 4 * sizeof (double);
-      dst += 4 * sizeof (double);
-    }
-}
-
-static void
-cmyk_to_rgba (const Babl *conversion,char *src,
-              char *dst,
-              long  n)
-{
-  while (n--)
-    {
-      double cyan    = 1.0-((double *) src)[0];
-      double magenta = 1.0-((double *) src)[1];
-      double yellow  = 1.0-((double *) src)[2];
-      double key     = 1.0-((double *) src)[3];
-
-      double red, green, blue;
-
-      if (key < 1.0)
-        {
-          cyan    = cyan * (1.0 - key) + key;
-          magenta = magenta * (1.0 - key) + key;
-          yellow  = yellow * (1.0 - key) + key;
-        }
-      else
-        {
-          cyan = magenta = yellow = 1.0;
-        }
+      if (key < 1.0)
+        {
+          cyan    = cyan * (1.0 - key) + key;
+          magenta = magenta * (1.0 - key) + key;
+          yellow  = yellow * (1.0 - key) + key;
+        }
+      else
+        {
+          cyan = magenta = yellow = 1.0;
+        }
 
       red   = 1.0 - cyan;
       green = 1.0 - magenta;
@@ -783,3 +460,343 @@ cmyka_to_cmyk (const Babl *conversion,char *src,
       dst += 4 * sizeof (double);
     }
 }
+
+
+int init (void);
+
+int
+init (void)
+{
+  babl_component_new ("cyan", NULL);
+  babl_component_new ("yellow", NULL);
+  babl_component_new ("magenta", NULL);
+  babl_component_new ("key", NULL);
+
+
+  babl_component_new ("ca", NULL);
+  babl_component_new ("ma", NULL);
+  babl_component_new ("ya", NULL);
+  babl_component_new ("ka", NULL);
+
+
+  babl_component_new ("Cyan", NULL);
+  babl_component_new ("Yellow", NULL);
+  babl_component_new ("Magenta", NULL);
+  babl_component_new ("Key", NULL);
+
+
+  babl_component_new ("Ca", NULL);
+  babl_component_new ("Ma", NULL);
+  babl_component_new ("Yea", NULL);
+  babl_component_new ("Ka", NULL);
+
+  babl_model_new (
+    "name", "camayakaA",
+    babl_component ("ca"),
+    babl_component ("ma"),
+    babl_component ("ya"),
+    babl_component ("ka"),
+    babl_component ("A"),
+    NULL
+  );
+
+  babl_model_new (
+    "name", "cmykA",
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    babl_component ("A"),
+    NULL
+  );
+  babl_model_new (
+    "name", "cmyk",
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    NULL
+  );
+  babl_model_new (
+    "name", "cmy",
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    NULL
+  );
+
+  babl_model_new (
+    "name", "CaMaYaKaA",
+    babl_component ("Ca"),
+    babl_component ("Ma"),
+    babl_component ("Yea"),
+    babl_component ("Ka"),
+    babl_component ("A"),
+    NULL
+  );
+
+  babl_model_new (
+    "name", "CMYKA",
+    babl_component ("Cyan"),
+    babl_component ("Magenta"),
+    babl_component ("Yellow"),
+    babl_component ("Key"),
+    babl_component ("A"),
+    NULL
+  );
+  babl_model_new (
+    "name", "CMYK",
+    babl_component ("Cyan"),
+    babl_component ("Magenta"),
+    babl_component ("Yellow"),
+    babl_component ("Key"),
+    NULL
+  );
+  babl_model_new (
+    "name", "CMY",
+    babl_component ("Cyan"),
+    babl_component ("Magenta"),
+    babl_component ("Yellow"),
+    NULL
+  );
+
+
+  babl_conversion_new (
+    babl_model ("cmykA"),
+    babl_model ("cmyk"),
+    "linear", cmyka_to_cmyk,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("cmyk"),
+    babl_model ("cmykA"),
+    "linear", cmyk_to_cmyka,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("cmykA"),
+    babl_model ("camayakaA"),
+    "linear", cmyka_to_cmykA,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("camayakaA"),
+    babl_model ("cmykA"),
+    "linear", cmykA_to_cmyka,
+    NULL
+  );
+
+
+
+
+
+  babl_conversion_new (
+    babl_model ("RGBA"),
+    babl_model ("camayakaA"),
+    "linear", rgba_to_cmykA,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("camayakaA"),
+    babl_model ("RGBA"),
+    "linear", cmykA_to_rgba,
+    NULL
+  );
+
+  babl_conversion_new (
+    babl_model ("RGBA"),
+    babl_model ("cmykA"),
+    "linear", rgba_to_cmyka,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("cmykA"),
+    babl_model ("RGBA"),
+    "linear", cmyka_to_rgba,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("RGBA"),
+    babl_model ("cmyk"),
+    "linear", rgba_to_cmyk,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("cmyk"),
+    babl_model ("RGBA"),
+    "linear", cmyk_to_rgba,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("cmyk"),
+    babl_model ("cmykA"),
+    "linear", cmyk_to_cmyka,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("RGBA"),
+    babl_model ("cmy"),
+    "linear", rgba_to_cmy,
+    NULL
+  );
+  babl_conversion_new (
+    babl_model ("cmy"),
+    babl_model ("RGBA"),
+    "linear", cmy_to_rgba,
+    NULL
+  );
+
+  babl_format_new (
+    "name", "camayakaA float",
+    babl_model ("camayakaA"),
+    babl_type ("float"),
+    babl_component ("ca"),
+    babl_component ("ma"),
+    babl_component ("ya"),
+    babl_component ("ka"),
+    babl_component ("A"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmykA float",
+    babl_model ("cmykA"),
+    babl_type ("float"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    babl_component ("A"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmyk float",
+    babl_model ("cmyk"),
+    babl_type ("float"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmy float",
+    babl_model ("cmy"),
+    babl_type ("float"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    NULL
+  );
+
+  babl_format_new (
+    "name", "cmyk u8",
+    babl_model ("cmyk"),
+    babl_type ("u8"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmykA u8",
+    babl_model ("cmykA"),
+    babl_type ("u8"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    babl_component ("A"),
+    NULL
+  );
+
+  babl_format_new (
+    "name", "cmyk u16",
+    babl_model ("cmyk"),
+    babl_type ("u16"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmykA u16",
+    babl_model ("cmykA"),
+    babl_type ("u16"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    babl_component ("A"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmyk u32",
+    babl_model ("cmyk"),
+    babl_type ("u32"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmykA u32",
+    babl_model ("cmykA"),
+    babl_type ("u32"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    babl_component ("A"),
+    NULL
+  );
+
+  babl_format_new (
+    "name", "cmyk float",
+    babl_model ("cmyk"),
+    babl_type ("float"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    NULL
+  );
+  babl_format_new (
+    "name", "cmykA float",
+    babl_model ("cmykA"),
+    babl_type ("float"),
+    babl_component ("cyan"),
+    babl_component ("magenta"),
+    babl_component ("yellow"),
+    babl_component ("key"),
+    babl_component ("A"),
+    NULL
+  );
+  babl_format_new (
+    "name", "camayakaA u16",
+    babl_model ("camayakaA"),
+    babl_type ("u16"),
+    babl_component ("ca"),
+    babl_component ("ma"),
+    babl_component ("ya"),
+    babl_component ("ka"),
+    babl_component ("A"),
+    NULL
+  );
+  babl_format_new (
+    "name", "camayakaA half",
+    babl_model ("camayakaA"),
+    babl_type ("half"),
+    babl_component ("ca"),
+    babl_component ("ma"),
+    babl_component ("ya"),
+    babl_component ("ka"),
+    babl_component ("A"),
+    NULL
+  );
+
+  return 0;
+}
+


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