[gimp] app: add handling of CIE Lab blend space to gradient
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add handling of CIE Lab blend space to gradient
- Date: Sat, 14 Apr 2018 16:14:14 +0000 (UTC)
commit 6d6da684f1cb4e07bce4883f6d37b1865d58d942
Author: Øyvind Kolås <pippin gimp org>
Date: Sat Apr 14 18:11:57 2018 +0200
app: add handling of CIE Lab blend space to gradient
Using CIE Lab yields gradients that more closely resemble the perceptual
gradients but without the gamma based blending problems of linear-RGB / CIE
XYZ.
app/core/gimpgradient.c | 38 ++++++++++++++++++++++++++++++--------
1 files changed, 30 insertions(+), 8 deletions(-)
---
diff --git a/app/core/gimpgradient.c b/app/core/gimpgradient.c
index 4d36d4e..3a269b4 100644
--- a/app/core/gimpgradient.c
+++ b/app/core/gimpgradient.c
@@ -100,6 +100,8 @@ G_DEFINE_TYPE_WITH_CODE (GimpGradient, gimp_gradient, GIMP_TYPE_DATA,
static const Babl *fish_srgb_to_linear_rgb = NULL;
static const Babl *fish_linear_rgb_to_srgb = NULL;
+static const Babl *fish_srgb_to_cie_lab = NULL;
+static const Babl *fish_cie_lab_a_to_srgb = NULL;
static void
@@ -128,6 +130,10 @@ gimp_gradient_class_init (GimpGradientClass *klass)
babl_format ("RGB double"));
fish_linear_rgb_to_srgb = babl_fish (babl_format ("RGBA double"),
babl_format ("R'G'B'A double"));
+ fish_srgb_to_cie_lab = babl_fish (babl_format ("R'G'B' double"),
+ babl_format ("CIE Lab double"));
+ fish_cie_lab_a_to_srgb = babl_fish (babl_format ("CIE Lab alpha double"),
+ babl_format ("R'G'B'A double"));
}
static void
@@ -514,22 +520,38 @@ gimp_gradient_get_color_at (GimpGradient *gradient,
if (seg->color == GIMP_GRADIENT_SEGMENT_RGB)
{
- if (blend_color_space == GIMP_GRADIENT_BLEND_RGB_LINEAR)
+ switch (blend_color_space)
{
- babl_process (fish_srgb_to_linear_rgb,
- &left_color, &left_color, 1);
- babl_process (fish_srgb_to_linear_rgb,
- &right_color, &right_color, 1);
+ case GIMP_GRADIENT_BLEND_CIE_LAB:
+ babl_process (fish_srgb_to_cie_lab,
+ &left_color, &left_color, 1);
+ babl_process (fish_srgb_to_cie_lab,
+ &right_color, &right_color, 1);
+ break;
+ case GIMP_GRADIENT_BLEND_RGB_LINEAR:
+ babl_process (fish_srgb_to_linear_rgb,
+ &left_color, &left_color, 1);
+ babl_process (fish_srgb_to_linear_rgb,
+ &right_color, &right_color, 1);
+ case GIMP_GRADIENT_BLEND_RGB_PERCEPTUAL:
+ break;
}
rgb.r = left_color.r + (right_color.r - left_color.r) * factor;
rgb.g = left_color.g + (right_color.g - left_color.g) * factor;
rgb.b = left_color.b + (right_color.b - left_color.b) * factor;
- if (blend_color_space == GIMP_GRADIENT_BLEND_RGB_LINEAR)
+ switch (blend_color_space)
{
- babl_process (fish_linear_rgb_to_srgb,
- &rgb, &rgb, 1);
+ case GIMP_GRADIENT_BLEND_CIE_LAB:
+ babl_process (fish_cie_lab_a_to_srgb,
+ &rgb, &rgb, 1);
+ break;
+ case GIMP_GRADIENT_BLEND_RGB_LINEAR:
+ babl_process (fish_linear_rgb_to_srgb,
+ &rgb, &rgb, 1);
+ case GIMP_GRADIENT_BLEND_RGB_PERCEPTUAL:
+ break;
}
}
else
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]