[gimp] modules: implement convert_buffer() in the gamma display filter
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] modules: implement convert_buffer() in the gamma display filter
- Date: Sat, 2 Nov 2013 00:51:36 +0000 (UTC)
commit fcd457e67b73fb921b5e2e6ef733a998898d1f14
Author: Michael Natterer <mitch gimp org>
Date: Sat Nov 2 01:51:05 2013 +0100
modules: implement convert_buffer() in the gamma display filter
modules/display-filter-gamma.c | 35 +++++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
---
diff --git a/modules/display-filter-gamma.c b/modules/display-filter-gamma.c
index eb919cc..17a5194 100644
--- a/modules/display-filter-gamma.c
+++ b/modules/display-filter-gamma.c
@@ -74,6 +74,9 @@ static void cdisplay_gamma_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
+static void cdisplay_gamma_convert_buffer (GimpColorDisplay *display,
+ GeglBuffer *buffer,
+ GeglRectangle *area);
static void cdisplay_gamma_convert_surface (GimpColorDisplay *display,
cairo_surface_t *surface);
static GtkWidget * cdisplay_gamma_configure (GimpColorDisplay *display);
@@ -128,6 +131,7 @@ cdisplay_gamma_class_init (CdisplayGammaClass *klass)
display_class->help_id = "gimp-colordisplay-gamma";
display_class->stock_id = GIMP_STOCK_DISPLAY_FILTER_GAMMA;
+ display_class->convert_buffer = cdisplay_gamma_convert_buffer;
display_class->convert_surface = cdisplay_gamma_convert_surface;
display_class->configure = cdisplay_gamma_configure;
}
@@ -181,6 +185,37 @@ cdisplay_gamma_set_property (GObject *object,
}
static void
+cdisplay_gamma_convert_buffer (GimpColorDisplay *display,
+ GeglBuffer *buffer,
+ GeglRectangle *area)
+{
+ CdisplayGamma *gamma = CDISPLAY_GAMMA (display);
+ GeglBufferIterator *iter;
+ gdouble one_over_gamma;
+
+ one_over_gamma = 1.0 / gamma->gamma;
+
+ iter = gegl_buffer_iterator_new (buffer, area, 0,
+ babl_format ("R'G'B'A float"),
+ GEGL_BUFFER_READWRITE, GEGL_ABYSS_NONE);
+
+ while (gegl_buffer_iterator_next (iter))
+ {
+ gfloat *data = iter->data[0];
+ gint count = iter->length;
+
+ while (count--)
+ {
+ *data = pow (*data, one_over_gamma); data++;
+ *data = pow (*data, one_over_gamma); data++;
+ *data = pow (*data, one_over_gamma); data++;
+
+ data++;
+ }
+ }
+}
+
+static void
cdisplay_gamma_convert_surface (GimpColorDisplay *display,
cairo_surface_t *surface)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]