Blame examples/gegl-slicer.c

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