From 81eb6599391bd02e90af312fd1ffd8f859d92f1f Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Thu, 10 Nov 2022 17:01:09 +0200 Subject: Replace deprecated in Gimp 2.10 functions Gimp 2.10 is required now. --- img-load.c | 50 ++++++++++++++++++++++++++++---------------------- img-save.c | 30 ++++++++++++++++++++++-------- plugin-img.c | 16 +++++++++------- 3 files changed, 59 insertions(+), 37 deletions(-) diff --git a/img-load.c b/img-load.c index 1aa27e9..fafe291 100644 --- a/img-load.c +++ b/img-load.c @@ -41,21 +41,22 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error) FILE *fp; size_t nread; size_t src_size; - guint8 *src, *dest; + guint8 *src, *dest, *buf; FileHeader hdr; ColorKey ckey; guint32 row, col, width, height; gint32 frame, nframes, *frames; - gchar buf[20]; + gchar layer_name[20]; gint32 image, layer; - GimpDrawable *drawable; - GimpPixelRgn pixel_rgn; - GimpImageType image_type; + GeglBuffer *gegl_buffer; + GimpImageType layer_type; + const Babl *format; ckey.is = 0; ckey.R = 0; ckey.G = 0; ckey.B = 0; + gimp_progress_init_printf ("Opening '%s'", gimp_filename_to_utf8 (filename)); @@ -107,11 +108,13 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error) { case FMT_RGB565: src_size *= 2; - image_type = GIMP_RGB_IMAGE; + layer_type = GIMP_RGB_IMAGE; + format = babl_format ("R'G'B' u8"); break; case FMT_RGB: src_size *= 3; - image_type = GIMP_RGB_IMAGE; + layer_type = GIMP_RGB_IMAGE; + format = babl_format ("R'G'B' u8"); /* * Read color key */ @@ -130,7 +133,8 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error) break; case FMT_RGBA: src_size *= 4; /* Alpha only for RGBA */ - image_type = GIMP_RGBA_IMAGE; + layer_type = GIMP_RGBA_IMAGE; + format = babl_format ("R'G'B'A u8"); break; default: D (("Invalid file format: %1u\n", hdr.fmt)); @@ -147,7 +151,10 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error) /* * We are ready to make image with layers */ - image = gimp_image_new (width, height, GIMP_RGB); + image = + gimp_image_new_with_precision (width, height, GIMP_RGB, + GIMP_PRECISION_U8_GAMMA); + gimp_image_undo_disable (image); gimp_image_set_filename (image, filename); frame = 0; @@ -162,14 +169,11 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error) gimp_progress_update ((gdouble) frame / (gdouble) nframes); D (("Reading frame #%u of %u (%ux%u, %lu bytes)\n", frame, nframes, width, height, src_size)); - g_snprintf (buf, sizeof (buf), "#%i", frame); + g_snprintf (layer_name, sizeof (layer_name), "#%i", frame); layer = - gimp_layer_new (image, buf, width, height, image_type, 100, + gimp_layer_new (image, layer_name, width, height, layer_type, 100, GIMP_NORMAL_MODE); - gimp_image_add_layer (image, layer, frame - 1); - drawable = gimp_drawable_get (layer); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, - TRUE, FALSE); + gegl_buffer = gimp_drawable_get_buffer (layer); nread = fread ((char *) src, src_size, 1, fp); if (nread != 1) @@ -185,18 +189,20 @@ img_load_image (const gchar * filename, ImageParasite * meta, GError ** error) fclose (fp); return -1; } + if (hdr.fmt == FMT_RGB565) { img_map_rgb565_to_rgb (src, dest, src_size); - gimp_pixel_rgn_set_rect (&pixel_rgn, (const guchar *) dest, 0, - 0, width, height); + buf = dest; } else - { - gimp_pixel_rgn_set_rect (&pixel_rgn, (const guchar *) src, 0, 0, - width, height); - } - gimp_drawable_detach (drawable); + buf = src; + + gegl_buffer_set (gegl_buffer, + GEGL_RECTANGLE (0, 0, width, height), 0, + format, buf, GEGL_AUTO_ROWSTRIDE); + g_object_unref (gegl_buffer); + gimp_image_insert_layer (image, layer, -1, frame - 1); } } diff --git a/img-save.c b/img-save.c index a94ae4b..f3dca61 100644 --- a/img-save.c +++ b/img-save.c @@ -272,13 +272,13 @@ img_save_image (gint32 image, const ImageParasite * plugin, const gchar * filename, GError ** error) { FILE *fp; - GimpPixelRgn pixel_rgn; - GimpDrawable *drawable = NULL; gint *layers = NULL, nlayers; size_t nwritten; guint8 *data = NULL, *pixels = NULL; + GeglBuffer *gegl_buffer; size_t data_size, npixels; gint i, width, height; + const Babl *format; FileHeader hdr; /* @@ -341,6 +341,7 @@ img_save_image (gint32 image, const ImageParasite * plugin, { case FMT_RGB565: data_size *= 2; + format = babl_format ("R'G'B' u8"); break; case FMT_RGB: @@ -359,6 +360,7 @@ img_save_image (gint32 image, const ImageParasite * plugin, return GIMP_PDB_EXECUTION_ERROR; } data_size *= 3; + format = babl_format ("R'G'B' u8"); break; case FMT_RGBA: @@ -367,7 +369,15 @@ img_save_image (gint32 image, const ImageParasite * plugin, "(%1u, %1u, %1u) to full transparent\n", plugin->ckey.R, plugin->ckey.G, plugin->ckey.B));); data_size *= 4; + format = babl_format ("R'G'B'A u8"); break; + + default: + D (("Invalid file format: %1u\n", hdr.fmt)); + g_set_error (error, 0, 0, "Invalid file format: %1u\n", hdr.fmt); + fclose (fp); + g_free (layers); + return -1; } /* @@ -378,12 +388,16 @@ img_save_image (gint32 image, const ImageParasite * plugin, for (i = 0; i < nlayers; i++) { gimp_progress_update ((gdouble) i / (gdouble) nlayers); - drawable = gimp_drawable_get (layers[i]); - gimp_pixel_rgn_init (&pixel_rgn, drawable, 0, 0, width, height, FALSE, - FALSE); - gimp_pixel_rgn_get_rect (&pixel_rgn, (guchar *) pixels, 0, 0, width, - height); - D (("Writing frame #%u of %u (%lu bytes)\n", i + 1, nlayers, data_size)); + gegl_buffer = gimp_drawable_get_buffer (layers[i]); + + gegl_buffer_get (gegl_buffer, GEGL_RECTANGLE (0, 0, + width, height), 1.0, + format, pixels, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); + + g_object_unref (gegl_buffer); + + D (("Writing frame #%u of %u (%lu bytes)\n", i + 1, nlayers, + data_size)); /* * Allow different image type for different layers */ diff --git a/plugin-img.c b/plugin-img.c index b4b19d7..d89ab6a 100644 --- a/plugin-img.c +++ b/plugin-img.c @@ -11,10 +11,12 @@ img_set_parasite (gint32 image, const ImageParasite * p) D (("Setting parasite for %u: format: %s (%1u), " "color key: %s (%1u, %1u, %1u)\n", image, FMT[p->format], p->format, (p->ckey.is) ? "yes" : "no", p->ckey.R, p->ckey.G, p->ckey.B)); - gimp_image_parasite_detach (image, PARASITE_ORIG_FILE); - gimp_image_attach_new_parasite (image, PARASITE_ORIG_FILE, - GIMP_PARASITE_PERSISTENT, - sizeof (ImageParasite), p); + gimp_image_detach_parasite (image, PARASITE_ORIG_FILE); + + const GimpParasite *gp = + gimp_parasite_new (PARASITE_ORIG_FILE, GIMP_PARASITE_PERSISTENT, + sizeof (*p), p); + gimp_image_attach_parasite (image, gp); } static void @@ -22,12 +24,12 @@ img_get_parasite (gint32 image, ImageParasite * p) { GimpParasite *gp = NULL; - gp = gimp_image_parasite_find (image, PARASITE_ORIG_FILE); + gp = gimp_image_get_parasite (image, PARASITE_ORIG_FILE); if (gp != NULL) { p->format = ((ImageParasite *) (gp->data))->format; p->ckey = ((ImageParasite *) (gp->data))->ckey; - D (("Setting parasite for %u: format: %s (%1u), " + D (("Getting parasite for %u: format: %s (%1u), " "color key: %s (%1u, %1u, %1u)\n", image, FMT[p->format], p->format, (p->ckey.is) ? "yes" : "no", p->ckey.R, p->ckey.G, p->ckey.B)); @@ -92,10 +94,10 @@ run (const gchar * name, gint nparams, const GimpParam * param, GimpRunMode run_mode; GimpPDBStatusType status = GIMP_PDB_SUCCESS; GimpExportReturn export = GIMP_EXPORT_CANCEL; - GError *error = NULL; run_mode = param[0].data.d_int32; + gegl_init (NULL, NULL); *nreturn_vals = 1; *return_vals = values; -- cgit v1.2.3