Bug 756822 - Colors/Desaturate/Luminosity should operate on linear RGB

Add GIMP_DESATURATE_LUMINANCE to enum GimpDesaturateMode and rename
GIMP_DESATURATE_LUMINOSITY to GIMP_DESATURATE_LUMA.

Keep GIMP_DESATURATE_LUMINOSITY as deprecated compat value and add it
to the script-fo and pygimp compat constants.

Change GimpOperationDesaturate to process GIMP_DESATURATE_LUMINANCE
with linear "RGBA float".
This commit is contained in:
Michael Natterer 2015-10-22 19:50:56 +02:00
parent f5f88b8134
commit 68a9835d56
6 changed files with 47 additions and 10 deletions

View File

@ -32,6 +32,7 @@
#include "gimpdesaturateconfig.h"
static void gimp_operation_desaturate_prepare (GeglOperation *operation);
static gboolean gimp_operation_desaturate_process (GeglOperation *operation,
void *in_buf,
void *out_buf,
@ -62,7 +63,9 @@ gimp_operation_desaturate_class_init (GimpOperationDesaturateClass *klass)
"description", "GIMP Desaturate operation",
NULL);
point_class->process = gimp_operation_desaturate_process;
operation_class->prepare = gimp_operation_desaturate_prepare;
point_class->process = gimp_operation_desaturate_process;
g_object_class_install_property (object_class,
GIMP_OPERATION_POINT_FILTER_PROP_CONFIG,
@ -79,6 +82,26 @@ gimp_operation_desaturate_init (GimpOperationDesaturate *self)
{
}
static void
gimp_operation_desaturate_prepare (GeglOperation *operation)
{
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
GimpDesaturateConfig *config = GIMP_DESATURATE_CONFIG (point->config);
const Babl *format;
if (config->mode == GIMP_DESATURATE_LUMINANCE)
{
format = babl_format ("RGBA float");
}
else
{
format = babl_format ("R'G'B'A float");
}
gegl_operation_set_format (operation, "input", format);
gegl_operation_set_format (operation, "output", format);
}
static gboolean
gimp_operation_desaturate_process (GeglOperation *operation,
void *in_buf,
@ -119,7 +142,8 @@ gimp_operation_desaturate_process (GeglOperation *operation,
}
break;
case GIMP_DESATURATE_LUMINOSITY:
case GIMP_DESATURATE_LUMA:
case GIMP_DESATURATE_LUMINANCE:
while (samples--)
{
gfloat value = GIMP_RGB_LUMINANCE (src[0], src[1], src[2]);

View File

@ -426,16 +426,18 @@ gimp_desaturate_mode_get_type (void)
static const GEnumValue values[] =
{
{ GIMP_DESATURATE_LIGHTNESS, "GIMP_DESATURATE_LIGHTNESS", "lightness" },
{ GIMP_DESATURATE_LUMINOSITY, "GIMP_DESATURATE_LUMINOSITY", "luminosity" },
{ GIMP_DESATURATE_LUMA, "GIMP_DESATURATE_LUMA", "luma" },
{ GIMP_DESATURATE_AVERAGE, "GIMP_DESATURATE_AVERAGE", "average" },
{ GIMP_DESATURATE_LUMINANCE, "GIMP_DESATURATE_LUMINANCE", "luminance" },
{ 0, NULL, NULL }
};
static const GimpEnumDesc descs[] =
{
{ GIMP_DESATURATE_LIGHTNESS, NC_("desaturate-mode", "Lightness"), NULL },
{ GIMP_DESATURATE_LUMINOSITY, NC_("desaturate-mode", "Luminosity"), NULL },
{ GIMP_DESATURATE_LUMA, NC_("desaturate-mode", "Luma"), NULL },
{ GIMP_DESATURATE_AVERAGE, NC_("desaturate-mode", "Average"), NULL },
{ GIMP_DESATURATE_LUMINANCE, NC_("desaturate-mode", "Luminance"), NULL },
{ 0, NULL, NULL }
};

View File

@ -233,8 +233,13 @@ GType gimp_desaturate_mode_get_type (void) G_GNUC_CONST;
typedef enum
{
GIMP_DESATURATE_LIGHTNESS, /*< desc="Lightness" >*/
GIMP_DESATURATE_LUMINOSITY, /*< desc="Luminosity" >*/
GIMP_DESATURATE_AVERAGE /*< desc="Average" >*/
GIMP_DESATURATE_LUMA, /*< desc="Luma" >*/
GIMP_DESATURATE_AVERAGE, /*< desc="Average" >*/
GIMP_DESATURATE_LUMINANCE, /*< desc="Luminance" >*/
#ifndef GIMP_DISABLE_DEPRECATED
GIMP_DESATURATE_LUMINOSITY = GIMP_DESATURATE_LUMA /*< skip, pdb-skip >*/
#endif /* GIMP_DISABLE_DEPRECATED */
} GimpDesaturateMode;

View File

@ -153,6 +153,9 @@ add_compat_enums(PyObject *m)
PyModule_AddIntConstant(m, "HIGHLIGHTS",
GIMP_TRANSFER_HIGHLIGHTS);
PyModule_AddIntConstant(m, "DESATURATE_LUMINOSITY",
GIMP_DESATURATE_LUMA);
PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_RGB",
GIMP_EXPORT_CAN_HANDLE_RGB);
PyModule_AddIntConstant(m, "EXPORT_CAN_HANDLE_GRAY",

View File

@ -169,6 +169,8 @@ static const NamedConstant const old_constants[] =
{ "MIDTONES", GIMP_TRANSFER_MIDTONES },
{ "HIGHLIGHTS", GIMP_TRANSFER_HIGHLIGHTS },
{ "DESATURATE-LUMINOSITY", GIMP_DESATURATE_LUMA },
{ NULL, 0 }
};

View File

@ -129,11 +129,12 @@ package Gimp::CodeGen::enums;
GimpDesaturateMode =>
{ contig => 1,
header => 'libgimpbase/gimpbaseenums.h',
symbols => [ qw(GIMP_DESATURATE_LIGHTNESS
GIMP_DESATURATE_LUMINOSITY GIMP_DESATURATE_AVERAGE) ],
symbols => [ qw(GIMP_DESATURATE_LIGHTNESS GIMP_DESATURATE_LUMA
GIMP_DESATURATE_AVERAGE GIMP_DESATURATE_LUMINANCE) ],
mapping => { GIMP_DESATURATE_LIGHTNESS => '0',
GIMP_DESATURATE_LUMINOSITY => '1',
GIMP_DESATURATE_AVERAGE => '2' }
GIMP_DESATURATE_LUMA => '1',
GIMP_DESATURATE_AVERAGE => '2',
GIMP_DESATURATE_LUMINANCE => '3' }
},
GimpDodgeBurnType =>
{ contig => 1,