Bug 720045 - Add black point compensation to Preferences/Color Management
Make black point compensation configurable separately for both proof and display.
This commit is contained in:

committed by
Michael Natterer

parent
6a02f4a19e
commit
a4821914d3
@ -2342,7 +2342,18 @@ prefs_dialog_new (Gimp *gimp,
|
|||||||
"display-rendering-intent", 0, 0,
|
"display-rendering-intent", 0, 0,
|
||||||
_("_Display rendering intent:"),
|
_("_Display rendering intent:"),
|
||||||
GTK_TABLE (table), row++, NULL);
|
GTK_TABLE (table), row++, NULL);
|
||||||
gtk_table_set_row_spacing (GTK_TABLE (table), row - 1, 12);
|
|
||||||
|
button =
|
||||||
|
gimp_prop_check_button_new (color_config,
|
||||||
|
"display-use-black-point-compensation",
|
||||||
|
_("Use _black point compensation for "
|
||||||
|
"the display"));
|
||||||
|
|
||||||
|
gtk_table_attach_defaults (GTK_TABLE (table),
|
||||||
|
button, 1, 2, row, row + 1);
|
||||||
|
gtk_widget_show (button);
|
||||||
|
gtk_table_set_row_spacing (GTK_TABLE (table), row, 12);
|
||||||
|
row++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == 3) /* printer profile */
|
if (i == 3) /* printer profile */
|
||||||
@ -2351,6 +2362,17 @@ prefs_dialog_new (Gimp *gimp,
|
|||||||
"simulation-rendering-intent", 0, 0,
|
"simulation-rendering-intent", 0, 0,
|
||||||
_("_Softproof rendering intent:"),
|
_("_Softproof rendering intent:"),
|
||||||
GTK_TABLE (table), row++, NULL);
|
GTK_TABLE (table), row++, NULL);
|
||||||
|
|
||||||
|
button =
|
||||||
|
gimp_prop_check_button_new (color_config,
|
||||||
|
"simulation-use-black-point-compensation",
|
||||||
|
_("Use black _point compensation "
|
||||||
|
"for softproofing"));
|
||||||
|
|
||||||
|
gtk_table_attach_defaults (GTK_TABLE (table),
|
||||||
|
button, 1, 2, row, row + 1);
|
||||||
|
gtk_widget_show (button);
|
||||||
|
row++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,19 +62,31 @@
|
|||||||
#define CMYK_PROFILE_BLURB \
|
#define CMYK_PROFILE_BLURB \
|
||||||
N_("The CMYK color profile used to convert between RGB and CMYK.")
|
N_("The CMYK color profile used to convert between RGB and CMYK.")
|
||||||
#define PRINTER_PROFILE_BLURB \
|
#define PRINTER_PROFILE_BLURB \
|
||||||
N_("The color profile used for simulating a printed version (softproof).")
|
N_("The color profile to use for soft proofing from your image's " \
|
||||||
|
"color space to some other color space, including " \
|
||||||
|
"soft proofing to a printer or other output device profile. ")
|
||||||
#define DISPLAY_RENDERING_INTENT_BLURB \
|
#define DISPLAY_RENDERING_INTENT_BLURB \
|
||||||
N_("Sets how colors are mapped for your display.")
|
N_("How colors are converted from your image's color space to your display device. " \
|
||||||
|
"Relative colorimetric is usually the best choice. " \
|
||||||
|
"Unless you use a LUT monitor profile (most monitor profiles are matrix), " \
|
||||||
|
"choosing perceptual intent really gives you relative colorimetric." )
|
||||||
|
#define DISPLAY_USE_BPC_BLURB \
|
||||||
|
N_("Do use black point compensation (unless you know you have a reason not to). ")
|
||||||
#define SIMULATION_RENDERING_INTENT_BLURB \
|
#define SIMULATION_RENDERING_INTENT_BLURB \
|
||||||
N_("Sets how colors are converted from RGB working space to the " \
|
N_("How colors are converted from your image's color space to the " \
|
||||||
"print simulation device.")
|
"output simulation device (usually your monitor). " \
|
||||||
|
"Try them all and choose what looks the best. ")
|
||||||
|
#define SIMULATION_USE_BPC_BLURB \
|
||||||
|
N_("Try with and without black point compensation "\
|
||||||
|
"and choose what looks best. ")
|
||||||
#define SIMULATION_GAMUT_CHECK_BLURB \
|
#define SIMULATION_GAMUT_CHECK_BLURB \
|
||||||
N_("When enabled, the print simulation will mark colors which can not be " \
|
N_("When enabled, the print simulation will mark colors " \
|
||||||
"represented in the target color space.")
|
"which can not be represented in the target color space.")
|
||||||
#define OUT_OF_GAMUT_COLOR_BLURB \
|
#define OUT_OF_GAMUT_COLOR_BLURB \
|
||||||
N_("The color to use for marking colors which are out of gamut.")
|
N_("The color to use for marking colors which are out of gamut.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
@ -85,7 +97,9 @@ enum
|
|||||||
PROP_DISPLAY_PROFILE_FROM_GDK,
|
PROP_DISPLAY_PROFILE_FROM_GDK,
|
||||||
PROP_PRINTER_PROFILE,
|
PROP_PRINTER_PROFILE,
|
||||||
PROP_DISPLAY_RENDERING_INTENT,
|
PROP_DISPLAY_RENDERING_INTENT,
|
||||||
|
PROP_DISPLAY_USE_BPC,
|
||||||
PROP_SIMULATION_RENDERING_INTENT,
|
PROP_SIMULATION_RENDERING_INTENT,
|
||||||
|
PROP_SIMULATION_USE_BPC,
|
||||||
PROP_SIMULATION_GAMUT_CHECK,
|
PROP_SIMULATION_GAMUT_CHECK,
|
||||||
PROP_OUT_OF_GAMUT_COLOR,
|
PROP_OUT_OF_GAMUT_COLOR,
|
||||||
PROP_DISPLAY_MODULE
|
PROP_DISPLAY_MODULE
|
||||||
@ -153,14 +167,24 @@ gimp_color_config_class_init (GimpColorConfigClass *klass)
|
|||||||
"display-rendering-intent",
|
"display-rendering-intent",
|
||||||
DISPLAY_RENDERING_INTENT_BLURB,
|
DISPLAY_RENDERING_INTENT_BLURB,
|
||||||
GIMP_TYPE_COLOR_RENDERING_INTENT,
|
GIMP_TYPE_COLOR_RENDERING_INTENT,
|
||||||
GIMP_COLOR_RENDERING_INTENT_PERCEPTUAL,
|
GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC,
|
||||||
GIMP_PARAM_STATIC_STRINGS);
|
GIMP_PARAM_STATIC_STRINGS);
|
||||||
|
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DISPLAY_USE_BPC,
|
||||||
|
"display-use-black-point-compensation",
|
||||||
|
DISPLAY_USE_BPC_BLURB,
|
||||||
|
TRUE,
|
||||||
|
GIMP_PARAM_STATIC_STRINGS);
|
||||||
GIMP_CONFIG_INSTALL_PROP_ENUM (object_class, PROP_SIMULATION_RENDERING_INTENT,
|
GIMP_CONFIG_INSTALL_PROP_ENUM (object_class, PROP_SIMULATION_RENDERING_INTENT,
|
||||||
"simulation-rendering-intent",
|
"simulation-rendering-intent",
|
||||||
SIMULATION_RENDERING_INTENT_BLURB,
|
SIMULATION_RENDERING_INTENT_BLURB,
|
||||||
GIMP_TYPE_COLOR_RENDERING_INTENT,
|
GIMP_TYPE_COLOR_RENDERING_INTENT,
|
||||||
GIMP_COLOR_RENDERING_INTENT_PERCEPTUAL,
|
GIMP_COLOR_RENDERING_INTENT_PERCEPTUAL,
|
||||||
GIMP_PARAM_STATIC_STRINGS);
|
GIMP_PARAM_STATIC_STRINGS);
|
||||||
|
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_SIMULATION_USE_BPC,
|
||||||
|
"simulation-use-black-point-compensation",
|
||||||
|
SIMULATION_USE_BPC_BLURB,
|
||||||
|
FALSE,
|
||||||
|
GIMP_PARAM_STATIC_STRINGS);
|
||||||
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_SIMULATION_GAMUT_CHECK,
|
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_SIMULATION_GAMUT_CHECK,
|
||||||
"simulation-gamut-check",
|
"simulation-gamut-check",
|
||||||
SIMULATION_GAMUT_CHECK_BLURB,
|
SIMULATION_GAMUT_CHECK_BLURB,
|
||||||
@ -171,7 +195,6 @@ gimp_color_config_class_init (GimpColorConfigClass *klass)
|
|||||||
OUT_OF_GAMUT_COLOR_BLURB,
|
OUT_OF_GAMUT_COLOR_BLURB,
|
||||||
FALSE, &color,
|
FALSE, &color,
|
||||||
GIMP_PARAM_STATIC_STRINGS);
|
GIMP_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
GIMP_CONFIG_INSTALL_PROP_STRING (object_class, PROP_DISPLAY_MODULE,
|
GIMP_CONFIG_INSTALL_PROP_STRING (object_class, PROP_DISPLAY_MODULE,
|
||||||
"display-module", NULL,
|
"display-module", NULL,
|
||||||
"CdisplayLcms",
|
"CdisplayLcms",
|
||||||
@ -241,9 +264,15 @@ gimp_color_config_set_property (GObject *object,
|
|||||||
case PROP_DISPLAY_RENDERING_INTENT:
|
case PROP_DISPLAY_RENDERING_INTENT:
|
||||||
color_config->display_intent = g_value_get_enum (value);
|
color_config->display_intent = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_DISPLAY_USE_BPC:
|
||||||
|
color_config->display_use_black_point_compensation = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
case PROP_SIMULATION_RENDERING_INTENT:
|
case PROP_SIMULATION_RENDERING_INTENT:
|
||||||
color_config->simulation_intent = g_value_get_enum (value);
|
color_config->simulation_intent = g_value_get_enum (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_SIMULATION_USE_BPC:
|
||||||
|
color_config->simulation_use_black_point_compensation = g_value_get_boolean (value);
|
||||||
|
break;
|
||||||
case PROP_SIMULATION_GAMUT_CHECK:
|
case PROP_SIMULATION_GAMUT_CHECK:
|
||||||
color_config->simulation_gamut_check = g_value_get_boolean (value);
|
color_config->simulation_gamut_check = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
@ -254,7 +283,6 @@ gimp_color_config_set_property (GObject *object,
|
|||||||
g_free (color_config->display_module);
|
g_free (color_config->display_module);
|
||||||
color_config->display_module = g_value_dup_string (value);
|
color_config->display_module = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -292,9 +320,15 @@ gimp_color_config_get_property (GObject *object,
|
|||||||
case PROP_DISPLAY_RENDERING_INTENT:
|
case PROP_DISPLAY_RENDERING_INTENT:
|
||||||
g_value_set_enum (value, color_config->display_intent);
|
g_value_set_enum (value, color_config->display_intent);
|
||||||
break;
|
break;
|
||||||
|
case PROP_DISPLAY_USE_BPC:
|
||||||
|
g_value_set_boolean (value, color_config->display_use_black_point_compensation);
|
||||||
|
break;
|
||||||
case PROP_SIMULATION_RENDERING_INTENT:
|
case PROP_SIMULATION_RENDERING_INTENT:
|
||||||
g_value_set_enum (value, color_config->simulation_intent);
|
g_value_set_enum (value, color_config->simulation_intent);
|
||||||
break;
|
break;
|
||||||
|
case PROP_SIMULATION_USE_BPC:
|
||||||
|
g_value_set_boolean (value, color_config->simulation_use_black_point_compensation);
|
||||||
|
break;
|
||||||
case PROP_SIMULATION_GAMUT_CHECK:
|
case PROP_SIMULATION_GAMUT_CHECK:
|
||||||
g_value_set_boolean (value, color_config->simulation_gamut_check);
|
g_value_set_boolean (value, color_config->simulation_gamut_check);
|
||||||
break;
|
break;
|
||||||
@ -304,7 +338,6 @@ gimp_color_config_get_property (GObject *object,
|
|||||||
case PROP_DISPLAY_MODULE:
|
case PROP_DISPLAY_MODULE:
|
||||||
g_value_set_string (value, color_config->display_module);
|
g_value_set_string (value, color_config->display_module);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -55,10 +55,14 @@ struct _GimpColorConfig
|
|||||||
gboolean simulation_gamut_check;
|
gboolean simulation_gamut_check;
|
||||||
GimpRGB out_of_gamut_color;
|
GimpRGB out_of_gamut_color;
|
||||||
|
|
||||||
|
gboolean display_use_black_point_compensation;
|
||||||
|
gboolean simulation_use_black_point_compensation;
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
/* Padding for future expansion */
|
/* Padding for future expansion */
|
||||||
void (* _gimp_reserved1) (void);
|
#if (GLIB_SIZEOF_VOID_P == 8)
|
||||||
void (* _gimp_reserved2) (void);
|
void (* _gimp_reserved2) (void);
|
||||||
|
#endif
|
||||||
void (* _gimp_reserved3) (void);
|
void (* _gimp_reserved3) (void);
|
||||||
void (* _gimp_reserved4) (void);
|
void (* _gimp_reserved4) (void);
|
||||||
void (* _gimp_reserved5) (void);
|
void (* _gimp_reserved5) (void);
|
||||||
|
@ -338,7 +338,6 @@ cdisplay_lcms_changed (GimpColorDisplay *display)
|
|||||||
cmsHPROFILE src_profile = NULL;
|
cmsHPROFILE src_profile = NULL;
|
||||||
cmsHPROFILE dest_profile = NULL;
|
cmsHPROFILE dest_profile = NULL;
|
||||||
cmsHPROFILE proof_profile = NULL;
|
cmsHPROFILE proof_profile = NULL;
|
||||||
cmsUInt32Number flags = 0;
|
|
||||||
cmsUInt16Number alarmCodes[cmsMAXCHANNELS] = { 0, };
|
cmsUInt16Number alarmCodes[cmsMAXCHANNELS] = { 0, };
|
||||||
|
|
||||||
if (lcms->transform)
|
if (lcms->transform)
|
||||||
@ -365,27 +364,28 @@ cdisplay_lcms_changed (GimpColorDisplay *display)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config->display_intent ==
|
|
||||||
GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC)
|
|
||||||
{
|
|
||||||
flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (proof_profile)
|
if (proof_profile)
|
||||||
{
|
{
|
||||||
|
cmsUInt32Number softproof_flags = 0;
|
||||||
|
|
||||||
if (! src_profile)
|
if (! src_profile)
|
||||||
src_profile = cmsCreate_sRGBProfile ();
|
src_profile = cmsCreate_sRGBProfile ();
|
||||||
|
|
||||||
if (! dest_profile)
|
if (! dest_profile)
|
||||||
dest_profile = cmsCreate_sRGBProfile ();
|
dest_profile = cmsCreate_sRGBProfile ();
|
||||||
|
|
||||||
flags |= cmsFLAGS_SOFTPROOFING;
|
softproof_flags |= cmsFLAGS_SOFTPROOFING;
|
||||||
|
|
||||||
|
if (config->simulation_use_black_point_compensation)
|
||||||
|
{
|
||||||
|
softproof_flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
|
||||||
|
}
|
||||||
|
|
||||||
if (config->simulation_gamut_check)
|
if (config->simulation_gamut_check)
|
||||||
{
|
{
|
||||||
guchar r, g, b;
|
guchar r, g, b;
|
||||||
|
|
||||||
flags |= cmsFLAGS_GAMUTCHECK;
|
softproof_flags |= cmsFLAGS_GAMUTCHECK;
|
||||||
|
|
||||||
gimp_rgb_get_uchar (&config->out_of_gamut_color, &r, &g, &b);
|
gimp_rgb_get_uchar (&config->out_of_gamut_color, &r, &g, &b);
|
||||||
|
|
||||||
@ -401,21 +401,28 @@ cdisplay_lcms_changed (GimpColorDisplay *display)
|
|||||||
proof_profile,
|
proof_profile,
|
||||||
config->simulation_intent,
|
config->simulation_intent,
|
||||||
config->display_intent,
|
config->display_intent,
|
||||||
flags);
|
softproof_flags);
|
||||||
cmsCloseProfile (proof_profile);
|
cmsCloseProfile (proof_profile);
|
||||||
}
|
}
|
||||||
else if (src_profile || dest_profile)
|
else if (src_profile || dest_profile)
|
||||||
{
|
{
|
||||||
|
cmsUInt32Number display_flags = 0;
|
||||||
|
|
||||||
if (! src_profile)
|
if (! src_profile)
|
||||||
src_profile = cmsCreate_sRGBProfile ();
|
src_profile = cmsCreate_sRGBProfile ();
|
||||||
|
|
||||||
if (! dest_profile)
|
if (! dest_profile)
|
||||||
dest_profile = cmsCreate_sRGBProfile ();
|
dest_profile = cmsCreate_sRGBProfile ();
|
||||||
|
|
||||||
|
if (config->display_use_black_point_compensation)
|
||||||
|
{
|
||||||
|
display_flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
|
||||||
|
}
|
||||||
|
|
||||||
lcms->transform = cmsCreateTransform (src_profile, TYPE_RGBA_FLT,
|
lcms->transform = cmsCreateTransform (src_profile, TYPE_RGBA_FLT,
|
||||||
dest_profile, TYPE_RGBA_FLT,
|
dest_profile, TYPE_RGBA_FLT,
|
||||||
config->display_intent,
|
config->display_intent,
|
||||||
flags);
|
display_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dest_profile)
|
if (dest_profile)
|
||||||
|
Reference in New Issue
Block a user