[gimp] app: add gimp_drawable_get_component_format() and _component_index()



commit 8e0563954d440ffdd747ce97113f90b55408c200
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jun 2 02:31:42 2014 +0200

    app: add gimp_drawable_get_component_format() and _component_index()

 app/core/gimpdrawable.c |   66 +++++++++++++++++++++++++++++++++++++++++++++++
 app/core/gimpdrawable.h |    5 +++
 2 files changed, 71 insertions(+), 0 deletions(-)
---
diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c
index 90a0498..53a25be 100644
--- a/app/core/gimpdrawable.c
+++ b/app/core/gimpdrawable.c
@@ -1680,6 +1680,72 @@ gimp_drawable_is_indexed (const GimpDrawable *drawable)
   return (gimp_drawable_get_base_type (drawable) == GIMP_INDEXED);
 }
 
+const Babl *
+gimp_drawable_get_component_format (const GimpDrawable *drawable,
+                                    GimpChannelType     channel)
+{
+  g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), NULL);
+
+  switch (channel)
+    {
+    case GIMP_RED_CHANNEL:
+      return gimp_babl_component_format (GIMP_RGB,
+                                         gimp_drawable_get_precision (drawable),
+                                         RED);
+
+    case GIMP_GREEN_CHANNEL:
+      return gimp_babl_component_format (GIMP_RGB,
+                                         gimp_drawable_get_precision (drawable),
+                                         GREEN);
+
+    case GIMP_BLUE_CHANNEL:
+      return gimp_babl_component_format (GIMP_RGB,
+                                         gimp_drawable_get_precision (drawable),
+                                         BLUE);
+
+    case GIMP_ALPHA_CHANNEL:
+      return gimp_babl_component_format (GIMP_RGB,
+                                         gimp_drawable_get_precision (drawable),
+                                         ALPHA);
+
+    case GIMP_GRAY_CHANNEL:
+      return gimp_babl_component_format (GIMP_GRAY,
+                                         gimp_drawable_get_precision (drawable),
+                                         GRAY);
+
+    case GIMP_INDEXED_CHANNEL:
+      return babl_format ("Y u8"); /* will extract grayscale, the best
+                                    * we can do here */
+    }
+
+  return NULL;
+}
+
+gint
+gimp_drawable_get_component_index (const GimpDrawable *drawable,
+                                   GimpChannelType     channel)
+{
+  g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), -1);
+
+  switch (channel)
+    {
+    case GIMP_RED_CHANNEL:     return RED;
+    case GIMP_GREEN_CHANNEL:   return GREEN;
+    case GIMP_BLUE_CHANNEL:    return BLUE;
+    case GIMP_GRAY_CHANNEL:    return GRAY;
+    case GIMP_INDEXED_CHANNEL: return INDEXED;
+    case GIMP_ALPHA_CHANNEL:
+      switch (gimp_drawable_get_base_type (drawable))
+        {
+        case GIMP_RGB:     return ALPHA;
+        case GIMP_GRAY:    return ALPHA_G;
+        case GIMP_INDEXED: return ALPHA_I;
+        }
+    }
+
+  return -1;
+}
+
 const guchar *
 gimp_drawable_get_colormap (const GimpDrawable *drawable)
 {
diff --git a/app/core/gimpdrawable.h b/app/core/gimpdrawable.h
index 84210f3..24713fb 100644
--- a/app/core/gimpdrawable.h
+++ b/app/core/gimpdrawable.h
@@ -214,6 +214,11 @@ gboolean        gimp_drawable_is_rgb             (const GimpDrawable *drawable);
 gboolean        gimp_drawable_is_gray            (const GimpDrawable *drawable);
 gboolean        gimp_drawable_is_indexed         (const GimpDrawable *drawable);
 
+const Babl  * gimp_drawable_get_component_format (const GimpDrawable *drawable,
+                                                  GimpChannelType     channel);
+gint          gimp_drawable_get_component_index  (const GimpDrawable *drawable,
+                                                  GimpChannelType     channel);
+
 const guchar  * gimp_drawable_get_colormap       (const GimpDrawable *drawable);
 
 GimpLayer    * gimp_drawable_get_floating_sel    (const GimpDrawable *drawable);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]