[gimp] Bug 723392 - Pasting an image replaces color profile with default one
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 723392 - Pasting an image replaces color profile with default one
- Date: Wed, 17 Jun 2015 07:57:44 +0000 (UTC)
commit fd86deb99806cf97026b1747ea29538e9dd254ee
Author: Michael Natterer <mitch gimp org>
Date: Wed Jun 17 09:55:08 2015 +0200
Bug 723392 - Pasting an image replaces color profile with default one
In gimpimage-new.c, tag new images with the source buffer's, pixbuf's
and drawable's color profile.
app/core/gimpimage-new.c | 43 ++++++++++++++++++++++++++++++++++++-------
1 files changed, 36 insertions(+), 7 deletions(-)
---
diff --git a/app/core/gimpimage-new.c b/app/core/gimpimage-new.c
index d9e6fb9..3fa4688 100644
--- a/app/core/gimpimage-new.c
+++ b/app/core/gimpimage-new.c
@@ -17,10 +17,12 @@
#include "config.h"
+#include <cairo.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gegl.h>
#include "libgimpbase/gimpbase.h"
+#include "libgimpcolor/gimpcolor.h"
#include "libgimpconfig/gimpconfig.h"
#include "core-types.h"
@@ -36,6 +38,7 @@
#include "gimpimage.h"
#include "gimpimage-colormap.h"
#include "gimpimage-new.h"
+#include "gimpimage-profile.h"
#include "gimpimage-undo.h"
#include "gimplayer.h"
#include "gimptemplate.h"
@@ -188,9 +191,20 @@ gimp_image_new_from_drawable (Gimp *gimp,
gimp_image_set_unit (new_image, gimp_image_get_unit (image));
if (GIMP_IS_LAYER (drawable))
- new_type = G_TYPE_FROM_INSTANCE (drawable);
+ {
+ const guint8 *icc_data;
+ gsize icc_len;
+
+ icc_data = gimp_image_get_icc_profile (image, &icc_len);
+ if (icc_data)
+ gimp_image_set_icc_profile (new_image, icc_data, icc_len, NULL);
+
+ new_type = G_TYPE_FROM_INSTANCE (drawable);
+ }
else
- new_type = GIMP_TYPE_LAYER;
+ {
+ new_type = GIMP_TYPE_LAYER;
+ }
new_layer = GIMP_LAYER (gimp_item_convert (GIMP_ITEM (drawable),
new_image, new_type));
@@ -264,10 +278,12 @@ gimp_image_new_from_buffer (Gimp *gimp,
GimpImage *invoke,
GimpBuffer *paste)
{
- GimpImage *image;
- GimpLayer *layer;
- const Babl *format;
- gboolean has_alpha;
+ GimpImage *image;
+ GimpLayer *layer;
+ const Babl *format;
+ gboolean has_alpha;
+ const guint8 *icc_data;
+ gsize icc_len;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (invoke == NULL || GIMP_IS_IMAGE (invoke), NULL);
@@ -295,6 +311,10 @@ gimp_image_new_from_buffer (Gimp *gimp,
gimp_image_set_unit (image, gimp_image_get_unit (invoke));
}
+ icc_data = gimp_buffer_get_icc_profile (paste, &icc_len);
+ if (icc_data)
+ gimp_image_set_icc_profile (image, icc_data, icc_len, NULL);
+
layer = gimp_layer_new_from_buffer (gimp_buffer_get_buffer (paste),
image,
gimp_image_get_layer_format (image,
@@ -317,7 +337,9 @@ gimp_image_new_from_pixbuf (Gimp *gimp,
GimpImage *new_image;
GimpLayer *layer;
GimpImageBaseType base_type;
- gboolean has_alpha = FALSE;
+ gboolean has_alpha;
+ guint8 *icc_data;
+ gsize icc_len;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
@@ -345,6 +367,13 @@ gimp_image_new_from_pixbuf (Gimp *gimp,
gimp_image_undo_disable (new_image);
+ icc_data = gimp_pixbuf_get_icc_profile (pixbuf, &icc_len);
+ if (icc_data)
+ {
+ gimp_image_set_icc_profile (new_image, icc_data, icc_len, NULL);
+ g_free (icc_data);
+ }
+
layer = gimp_layer_new_from_pixbuf (pixbuf, new_image,
gimp_image_get_layer_format (new_image,
has_alpha),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]