[gimp] Make luma_lighten/darken_only blend modes work in AnyRGB
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Make luma_lighten/darken_only blend modes work in AnyRGB
- Date: Mon, 10 Jun 2019 09:45:34 +0000 (UTC)
commit 65f85e7078906c9a06d62b741cbbd91c175bf3d1
Author: Elle Stone <ellestone ninedegreesbelow com>
Date: Sun Jun 9 17:01:49 2019 -0400
Make luma_lighten/darken_only blend modes work in AnyRGB
.../layer-modes/gimpoperationlayermode-blend.c | 41 ++++++++++++++++------
1 file changed, 31 insertions(+), 10 deletions(-)
---
diff --git a/app/operations/layer-modes/gimpoperationlayermode-blend.c
b/app/operations/layer-modes/gimpoperationlayermode-blend.c
index 8087f98bf9..f88a87a8ef 100644
--- a/app/operations/layer-modes/gimpoperationlayermode-blend.c
+++ b/app/operations/layer-modes/gimpoperationlayermode-blend.c
@@ -815,6 +815,11 @@ gimp_operation_layer_mode_blend_luma_darken_only (GeglOperation *operation,
gfloat *comp,
gint samples)
{
+ const Babl *space = gegl_operation_get_source_space (operation, "input");
+ double red_luminance, green_luminance, blue_luminance;
+ babl_space_get_rgb_luminance (space,
+ &red_luminance, &green_luminance, &blue_luminance);
+
while (samples--)
{
if (in[ALPHA] != 0.0f && layer[ALPHA] != 0.0f)
@@ -823,8 +828,13 @@ gimp_operation_layer_mode_blend_luma_darken_only (GeglOperation *operation,
gfloat src_luminance;
gint c;
- dest_luminance = GIMP_RGB_LUMINANCE (in[0], in[1], in[2]);
- src_luminance = GIMP_RGB_LUMINANCE (layer[0], layer[1], layer[2]);
+ dest_luminance = (in[0] * red_luminance) +
+ (in[1] * green_luminance) +
+ (in[2] * blue_luminance);
+
+ src_luminance = (layer[0] * red_luminance) +
+ (layer[1] * green_luminance) +
+ (layer[2] * blue_luminance);
if (dest_luminance <= src_luminance)
{
@@ -853,6 +863,11 @@ gimp_operation_layer_mode_blend_luma_lighten_only (GeglOperation *operation,
gfloat *comp,
gint samples)
{
+ const Babl *space = gegl_operation_get_source_space (operation, "input");
+ double red_luminance, green_luminance, blue_luminance;
+ babl_space_get_rgb_luminance (space,
+ &red_luminance, &green_luminance, &blue_luminance);
+
while (samples--)
{
if (in[ALPHA] != 0.0f && layer[ALPHA] != 0.0f)
@@ -861,8 +876,13 @@ gimp_operation_layer_mode_blend_luma_lighten_only (GeglOperation *operation,
gfloat src_luminance;
gint c;
- dest_luminance = GIMP_RGB_LUMINANCE (in[0], in[1], in[2]);
- src_luminance = GIMP_RGB_LUMINANCE (layer[0], layer[1], layer[2]);
+ dest_luminance = (in[0] * red_luminance) +
+ (in[1] * green_luminance) +
+ (in[2] * blue_luminance);
+
+ src_luminance = (layer[0] * red_luminance) +
+ (layer[1] * green_luminance) +
+ (layer[2] * blue_luminance);
if (dest_luminance >= src_luminance)
{
@@ -891,14 +911,15 @@ gimp_operation_layer_mode_blend_luminance (GeglOperation *operation,
gfloat *comp,
gint samples)
{
- const Babl *fish;
- gfloat *scratch;
- gfloat *in_Y;
- gfloat *layer_Y;
- const Babl *space = gegl_operation_get_source_space (operation, "input");
+ static const Babl *fish;
+ gfloat *scratch;
+ gfloat *in_Y;
+ gfloat *layer_Y;
+ const Babl *format = gegl_operation_get_source_format (operation, "input");
+ const Babl *space = gegl_operation_get_source_space (operation, "input");
fish = babl_fish (babl_format_with_space ("RGBA float", space),
- babl_format_with_space ("Y float", space));
+ babl_format_with_space ("Y float", space));
scratch = gegl_scratch_new (gfloat, 2 * samples);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]