Blame examples/gegl-slicer.c

Packit Service 2781ba
#include <stdlib.h>
Packit Service 2781ba
#include <gegl.h>
Packit Service 2781ba
#include <string.h>
Packit Service 2781ba
Packit Service 2781ba
gint
Packit Service 2781ba
main (gint    argc,
Packit Service 2781ba
      gchar **argv)
Packit Service 2781ba
{
Packit Service 2781ba
  gchar *rules;
Packit Service 2781ba
  GeglNode *gegl,
Packit Service 2781ba
           *load_file,
Packit Service 2781ba
           *crop,
Packit Service 2781ba
           *save_file;
Packit Service 2781ba
  GError *error = NULL;
Packit Service 2781ba
Packit Service 2781ba
  gegl_init (&argc, &argv);
Packit Service 2781ba
Packit Service 2781ba
  if (argv[1]==NULL ||
Packit Service 2781ba
      argv[2]==NULL)
Packit Service 2781ba
    {
Packit Service 2781ba
      g_print ("\nusage: %s <inputimage> <slicefile> [pathprefix]\n\n"
Packit Service 2781ba
 "  inputimage: the .png, .jpg, .svg or similar image to load\n"
Packit Service 2781ba
 "  slicefile: a text file with rule lines like (x,y widthxheight slice1.png)\n"
Packit Service 2781ba
 "  pathprefix: a string to preprend to the names of slices in theslicefile\n", strrchr (argv[0], '/')+1);
Packit Service 2781ba
      exit (-1);
Packit Service 2781ba
    }
Packit Service 2781ba
Packit Service 2781ba
  gegl = gegl_node_new ();
Packit Service 2781ba
  load_file = gegl_node_new_child (gegl,
Packit Service 2781ba
                              "operation", "gegl:load",
Packit Service 2781ba
                              "path", argv[1],
Packit Service 2781ba
                              NULL);
Packit Service 2781ba
Packit Service 2781ba
  crop = gegl_node_new_child (gegl,
Packit Service 2781ba
                              "operation", "gegl:crop",
Packit Service 2781ba
                              NULL);
Packit Service 2781ba
Packit Service 2781ba
  save_file = gegl_node_new_child (gegl,
Packit Service 2781ba
                                   "operation", "gegl:png-save",
Packit Service 2781ba
                                   "compression", 9,
Packit Service 2781ba
                                   "bitdepth", 8,
Packit Service 2781ba
                                   NULL);
Packit Service 2781ba
  gegl_node_link_many (load_file, crop, save_file, NULL);
Packit Service 2781ba
Packit Service 2781ba
  if (g_file_get_contents (argv[2], &rules, NULL, &error))
Packit Service 2781ba
    {
Packit Service 2781ba
      gchar *line;
Packit Service 2781ba
      gchar *next_line = NULL;
Packit Service 2781ba
      
Packit Service 2781ba
      for (line = rules;line; line = next_line)
Packit Service 2781ba
        {
Packit Service 2781ba
          gchar *next_new_line;
Packit Service 2781ba
          next_new_line = strchr (line, '\n');
Packit Service 2781ba
          if (next_new_line)
Packit Service 2781ba
            {
Packit Service 2781ba
              next_line = next_new_line + 1;
Packit Service 2781ba
              *next_new_line = '\0';
Packit Service 2781ba
            }
Packit Service 2781ba
          else
Packit Service 2781ba
            {
Packit Service 2781ba
              next_line = NULL;
Packit Service 2781ba
            }
Packit Service 2781ba
Packit Service 2781ba
          while (*line == ' ')line++;
Packit Service 2781ba
Packit Service 2781ba
          if (line[0]!='#' && line[0]!='\0')
Packit Service 2781ba
            {
Packit Service 2781ba
              gint x, y, width, height;
Packit Service 2781ba
              x = strtol (line, &line, 10);
Packit Service 2781ba
              while (*line == ' ' || *line == ',')line++;
Packit Service 2781ba
              y = strtol (line, &line, 10);
Packit Service 2781ba
              while (*line == ' ' || *line == ',')line++;
Packit Service 2781ba
              width = strtol (line, &line, 10);
Packit Service 2781ba
              while (*line == ' ' || *line == 'x')line++;
Packit Service 2781ba
              height = strtol (line, &line, 10);
Packit Service 2781ba
              while (*line == ' ')line++;
Packit Service 2781ba
Packit Service 2781ba
              {
Packit Service 2781ba
                GString *str = g_string_new ("");
Packit Service 2781ba
                if (argv[3])
Packit Service 2781ba
                  {
Packit Service 2781ba
                    g_string_append (str, argv[3]);
Packit Service 2781ba
                  }
Packit Service 2781ba
                g_string_append (str, line);
Packit Service 2781ba
                gegl_node_set (save_file, "path", str->str, NULL);
Packit Service 2781ba
              gegl_node_set (crop, "x", x*1.0,
Packit Service 2781ba
                                   "y", y*1.0,
Packit Service 2781ba
                                   "width", width*1.0,
Packit Service 2781ba
                                   "height", height * 1.0,
Packit Service 2781ba
                                   NULL);
Packit Service 2781ba
              g_print ("%s (%i,%i %ix%i)\n", str->str, x, y, width, height);
Packit Service 2781ba
              g_string_free (str, TRUE);
Packit Service 2781ba
            }
Packit Service 2781ba
              gegl_node_process (save_file);
Packit Service 2781ba
            }
Packit Service 2781ba
        }
Packit Service 2781ba
      g_free (rules);
Packit Service 2781ba
    } 
Packit Service 2781ba
  return 0;
Packit Service 2781ba
}