mirror of https://github.com/GNOME/gimp.git
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:
parent
f5f88b8134
commit
68a9835d56
|
@ -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]);
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue