Blame operations/common/svg-luminancetoalpha.c

Packit Service 2781ba
/* This file is an image processing operation for GEGL
Packit Service 2781ba
 *
Packit Service 2781ba
 * GEGL is free software; you can redistribute it and/or
Packit Service 2781ba
 * modify it under the terms of the GNU Lesser General Public
Packit Service 2781ba
 * License as published by the Free Software Foundation; either
Packit Service 2781ba
 * version 3 of the License, or (at your option) any later version.
Packit Service 2781ba
 *
Packit Service 2781ba
 * GEGL is distributed in the hope that it will be useful,
Packit Service 2781ba
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 2781ba
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 2781ba
 * Lesser General Public License for more details.
Packit Service 2781ba
 *
Packit Service 2781ba
 * You should have received a copy of the GNU Lesser General Public
Packit Service 2781ba
 * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
Packit Service 2781ba
 *
Packit Service 2781ba
 * Copyright 2006 Øyvind Kolås <pippin@gimp.org>
Packit Service 2781ba
 * Copyright 2006 Geert Jordaens <geert.jordaens@telenet.be>
Packit Service 2781ba
 */
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
#include "config.h"
Packit Service 2781ba
#include <glib/gi18n-lib.h>
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
#ifdef GEGL_CHANT_PROPERTIES
Packit Service 2781ba
Packit Service 2781ba
gegl_chant_string (values, _("Values"), "", _("list of <number>s"))
Packit Service 2781ba
Packit Service 2781ba
#else
Packit Service 2781ba
Packit Service 2781ba
#define GEGL_CHANT_TYPE_POINT_FILTER
Packit Service 2781ba
#define GEGL_CHANT_C_FILE       "svg-luminancetoalpha.c"
Packit Service 2781ba
Packit Service 2781ba
#include "gegl-chant.h"
Packit Service 2781ba
#include <math.h>
Packit Service 2781ba
#include <stdlib.h>
Packit Service 2781ba
Packit Service 2781ba
static void prepare (GeglOperation *operation)
Packit Service 2781ba
{
Packit Service 2781ba
  const Babl *format = babl_format ("RaGaBaA float");
Packit Service 2781ba
Packit Service 2781ba
  gegl_operation_set_format (operation, "input", format);
Packit Service 2781ba
  gegl_operation_set_format (operation, "output", format);
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
static gboolean
Packit Service 2781ba
process (GeglOperation       *op,
Packit Service 2781ba
         void                *in_buf,
Packit Service 2781ba
         void                *out_buf,
Packit Service 2781ba
         glong                n_pixels,
Packit Service 2781ba
         const GeglRectangle *roi,
Packit Service 2781ba
         gint                 level)
Packit Service 2781ba
{
Packit Service 2781ba
  gfloat      *in = in_buf;
Packit Service 2781ba
  gfloat      *out = out_buf;
Packit Service 2781ba
  gfloat      *m;
Packit Service 2781ba
Packit Service 2781ba
  gfloat ma[25] = { 0.0,      0.0,      0.0,     0.0, 0.0,
Packit Service 2781ba
                    0.0,      0.0,      0.0,     0.0, 0.0,
Packit Service 2781ba
                    0.0,      0.0,      0.0,     0.0, 0.0,
Packit Service 2781ba
                    0.2125,   0.7154,   0.0721,  0.0, 0.0,
Packit Service 2781ba
                    0.0,      0.0,      0.0,     0.0, 1.0};
Packit Service 2781ba
  glong        i;
Packit Service 2781ba
Packit Service 2781ba
  m = ma;
Packit Service 2781ba
  for (i=0; i
Packit Service 2781ba
    {
Packit Service 2781ba
      out[0] =  m[0]  * in[0] +  m[1]  * in[1] + m[2]  * in[2] + m[3]  * in[3] + m[4];
Packit Service 2781ba
      out[1] =  m[5]  * in[0] +  m[6]  * in[1] + m[7]  * in[2] + m[8]  * in[3] + m[9];
Packit Service 2781ba
      out[2] =  m[10] * in[0] +  m[11] * in[1] + m[12] * in[2] + m[13] * in[3] + m[14];
Packit Service 2781ba
      out[3] =  m[15] * in[0] +  m[16] * in[1] + m[17] * in[2] + m[18] * in[3] + m[19];
Packit Service 2781ba
      in  += 4;
Packit Service 2781ba
      out += 4;
Packit Service 2781ba
    }
Packit Service 2781ba
  return TRUE;
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
static void
Packit Service 2781ba
gegl_chant_class_init (GeglChantClass *klass)
Packit Service 2781ba
{
Packit Service 2781ba
  GeglOperationClass            *operation_class;
Packit Service 2781ba
  GeglOperationPointFilterClass *point_filter_class;
Packit Service 2781ba
Packit Service 2781ba
  operation_class    = GEGL_OPERATION_CLASS (klass);
Packit Service 2781ba
  point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
Packit Service 2781ba
Packit Service 2781ba
  point_filter_class->process = process;
Packit Service 2781ba
  operation_class->prepare = prepare;
Packit Service 2781ba
Packit Service 2781ba
  gegl_operation_class_set_keys (operation_class,
Packit Service 2781ba
    "name"       , "gegl:svg-luminancetoalpha",
Packit Service 2781ba
    "categories" , "compositors:svgfilter",
Packit Service 2781ba
    "description",
Packit Service 2781ba
       _("SVG color matrix operation svg_luminancetoalpha"),
Packit Service 2781ba
        NULL);
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
#endif