示例#1
0
static void
mean_rectangle_noalloc (GeglBuffer    *input,
                        GeglRectangle *rect,
                        GeglColor     *color)
{
  GeglBufferIterator *gi;
  gfloat              col[] = {0.0, 0.0, 0.0, 0.0};
  gint                c;

  gi = gegl_buffer_iterator_new (input, rect, 0, babl_format ("RaGaBaA float"),
                                 GEGL_ACCESS_READ, GEGL_ABYSS_CLAMP);

  while (gegl_buffer_iterator_next (gi))
    {
      gint    k;
      gfloat *data = (gfloat*) gi->data[0];

      for (k = 0; k < gi->length; k++)
        {
          for (c = 0; c < 4; c++)
            col[c] += data[c];

          data += 4;
        }
    }

  for (c = 0; c < 4; c++)
    col[c] /= rect->width * rect->height;

  gegl_color_set_pixel (color, babl_format ("RaGaBaA float"), col);
}
示例#2
0
GeglColor *
gimp_gegl_color_new (const GimpRGB *rgb)
{
  GeglColor *color;

  g_return_val_if_fail (rgb != NULL, NULL);

  color = gegl_color_new (NULL);
  gegl_color_set_pixel (color, babl_format ("R'G'B'A double"), rgb);

  return color;
}
void
gegl_color_set_components (GeglColor *color, GValue *value, gdouble *components, gint components_length)
{
  Babl *format;

  if (!(G_TYPE_POINTER == G_VALUE_TYPE(value)))
    return;
  format = g_value_get_pointer (value);

  if (!color || !format || components_length != babl_format_get_n_components (format))
    return;
  else
    {
      gint        bpp        = babl_format_get_bytes_per_pixel (format);
      const Babl *comp_type  = babl_format_get_type (format, 0);

      if (comp_type == babl_type ("u8"))
        {
          int i;
          guint8 *pixel_buf = alloca (bpp * components_length);

          for (i = 0; i < components_length; ++i)
            pixel_buf[i] = components[i];

          gegl_color_set_pixel (color, format, pixel_buf);
        }
      else if (comp_type == babl_type ("u16"))
        {
          int i;
          guint16 *pixel_buf = alloca (bpp * components_length);

          for (i = 0; i < components_length; ++i)
            pixel_buf[i] = components[i];

          gegl_color_set_pixel (color, format, pixel_buf);
        }
      else if (comp_type == babl_type ("u32"))
        {
          int i;
          guint32 *pixel_buf = alloca (bpp * components_length);

          for (i = 0; i < components_length; ++i)
            pixel_buf[i] = components[i];

          gegl_color_set_pixel (color, format, pixel_buf);
        }
      else if (comp_type == babl_type ("float"))
        {
          int i;
          float *pixel_buf = alloca (bpp * components_length);

          for (i = 0; i < components_length; ++i)
            pixel_buf[i] = components[i];

          gegl_color_set_pixel (color, format, pixel_buf);
        }
      else if (comp_type == babl_type ("double"))
        {
          gegl_color_set_pixel (color, format, components);
        }
    }
}