[gimp] app: use RGBA double to pick and average in gimp_pickable_pick_color()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: use RGBA double to pick and average in gimp_pickable_pick_color()
- Date: Sun, 9 Jun 2013 18:15:52 +0000 (UTC)
commit 4e9661bd20e35250784c4670d5bf1cc94ce64418
Author: Michael Natterer <mitch gimp org>
Date: Sun Jun 9 20:13:50 2013 +0200
app: use RGBA double to pick and average in gimp_pickable_pick_color()
It was still putting all picked colors through a guchar[4].
app/core/gimppickable.c | 30 ++++++++++++++----------------
1 files changed, 14 insertions(+), 16 deletions(-)
---
diff --git a/app/core/gimppickable.c b/app/core/gimppickable.c
index f7e581b..3d4888b 100644
--- a/app/core/gimppickable.c
+++ b/app/core/gimppickable.c
@@ -206,21 +206,21 @@ gimp_pickable_pick_color (GimpPickable *pickable,
gint *color_index)
{
const Babl *format;
- guchar pixel[4];
+ gdouble pixel[4];
g_return_val_if_fail (GIMP_IS_PICKABLE (pickable), FALSE);
- format = babl_format ("R'G'B'A u8");
+ format = babl_format ("RGBA double");
if (! gimp_pickable_get_pixel_at (pickable, x, y, format, pixel))
return FALSE;
if (sample_average)
{
- gint count = 0;
- gint color_avg[4] = { 0, 0, 0, 0 };
- gint radius = (gint) average_radius;
- gint i, j;
+ gint count = 0;
+ gdouble color_avg[4] = { 0.0, 0.0, 0.0, 0.0 };
+ gint radius = (gint) average_radius;
+ gint i, j;
for (i = x - radius; i <= x + radius; i++)
for (j = y - radius; j <= y + radius; j++)
@@ -234,17 +234,13 @@ gimp_pickable_pick_color (GimpPickable *pickable,
color_avg[ALPHA] += pixel[ALPHA];
}
- pixel[RED] = (guchar) ((color_avg[RED] + count / 2) / count);
- pixel[GREEN] = (guchar) ((color_avg[GREEN] + count / 2) / count);
- pixel[BLUE] = (guchar) ((color_avg[BLUE] + count / 2) / count);
- pixel[ALPHA] = (guchar) ((color_avg[ALPHA] + count / 2) / count);
+ pixel[RED] = color_avg[RED] / count;
+ pixel[GREEN] = color_avg[GREEN] / count;
+ pixel[BLUE] = color_avg[BLUE] / count;
+ pixel[ALPHA] = color_avg[ALPHA] / count;
}
- gimp_rgba_set_uchar (color,
- pixel[RED],
- pixel[GREEN],
- pixel[BLUE],
- pixel[ALPHA]);
+ gimp_rgba_set_pixel (color, format, pixel);
if (color_index)
{
@@ -252,7 +248,9 @@ gimp_pickable_pick_color (GimpPickable *pickable,
if (babl_format_is_palette (format) && ! sample_average)
{
- gimp_pickable_get_pixel_at (pickable, x, y, format, pixel);
+ guchar indexed_pixel[4];
+
+ gimp_pickable_get_pixel_at (pickable, x, y, format, indexed_pixel);
*color_index = pixel[0];
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]