From 8a55b13577462667130ca86bd53f1bf9e0a5b0cb Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Sun, 22 Apr 2012 19:47:46 +0200 Subject: [PATCH] app: add gimp_babl_component_format() and use it in GimpImage --- app/core/gimpimage.c | 40 ++++++++++++++++++++++++++++------ app/gegl/gimp-babl.c | 51 ++++++++++++++++++++++++++++++++++++++++++++ app/gegl/gimp-babl.h | 3 +++ 3 files changed, 87 insertions(+), 7 deletions(-) diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c index 9ef7bbfb39..868c04e304 100644 --- a/app/core/gimpimage.c +++ b/app/core/gimpimage.c @@ -1551,7 +1551,12 @@ gimp_image_get_mask_format (const GimpImage *image) { g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL); - return babl_format ("Y u8"); + switch (gimp_image_get_precision (image)) + { + case GIMP_PRECISION_U8: return babl_format ("Y u8"); + } + + g_return_val_if_reached (NULL); } gint @@ -2061,12 +2066,33 @@ gimp_image_get_component_format (const GimpImage *image, switch (channel) { - case GIMP_RED_CHANNEL: return babl_format ("R' u8"); - case GIMP_GREEN_CHANNEL: return babl_format ("G' u8"); - case GIMP_BLUE_CHANNEL: return babl_format ("B' u8"); - case GIMP_GRAY_CHANNEL: return babl_format ("Y' u8"); - case GIMP_INDEXED_CHANNEL: return babl_format ("Y' u8"); /* XXX: seems wrong */ - case GIMP_ALPHA_CHANNEL: return babl_format ("A u8"); + case GIMP_RED_CHANNEL: + return gimp_babl_component_format (GIMP_RGB, + gimp_image_get_precision (image), + RED); + + case GIMP_GREEN_CHANNEL: + return gimp_babl_component_format (GIMP_RGB, + gimp_image_get_precision (image), + GREEN); + + case GIMP_BLUE_CHANNEL: + return gimp_babl_component_format (GIMP_RGB, + gimp_image_get_precision (image), + BLUE); + + case GIMP_ALPHA_CHANNEL: + return gimp_babl_component_format (GIMP_RGB, + gimp_image_get_precision (image), + ALPHA); + + case GIMP_GRAY_CHANNEL: + return gimp_babl_component_format (GIMP_GRAY, + gimp_image_get_precision (image), + GRAY); + + case GIMP_INDEXED_CHANNEL: + return babl_format ("Y' u8"); /* XXX: seems wrong */ } return NULL; diff --git a/app/gegl/gimp-babl.c b/app/gegl/gimp-babl.c index f7d3b1f24b..78a07175fb 100644 --- a/app/gegl/gimp-babl.c +++ b/app/gegl/gimp-babl.c @@ -206,3 +206,54 @@ gimp_babl_format (GimpImageBaseType base_type, g_return_val_if_reached (NULL); } + +const Babl * +gimp_babl_component_format (GimpImageBaseType base_type, + GimpPrecision precision, + gint index) +{ + switch (base_type) + { + case GIMP_RGB: + switch (precision) + { + case GIMP_PRECISION_U8: + switch (index) + { + case 0: return babl_format ("R' u8"); + case 1: return babl_format ("G' u8"); + case 2: return babl_format ("B' u8"); + case 3: return babl_format ("A u8"); + default: + break; + } + + default: + break; + } + break; + + case GIMP_GRAY: + switch (precision) + { + case GIMP_PRECISION_U8: + switch (index) + { + case 0: return babl_format ("Y' u8"); + case 1: return babl_format ("A u8"); + default: + break; + } + + default: + break; + } + break; + + case GIMP_INDEXED: + /* need to use the image's api for this */ + break; + } + + g_return_val_if_reached (NULL); +} diff --git a/app/gegl/gimp-babl.h b/app/gegl/gimp-babl.h index 1a50b1dd26..efadeae602 100644 --- a/app/gegl/gimp-babl.h +++ b/app/gegl/gimp-babl.h @@ -32,6 +32,9 @@ GimpPrecision gimp_babl_format_get_precision (const Babl *format); const Babl * gimp_babl_format (GimpImageBaseType base_type, GimpPrecision precision, gboolean with_alpha); +const Babl * gimp_babl_component_format (GimpImageBaseType base_type, + GimpPrecision precision, + gint index); #endif /* __GIMP_BABL_H__ */