void gimp_brightness_contrast_config_set_node (GimpBrightnessContrastConfig *config, GeglNode *node) { gdouble brightness; gdouble contrast; g_return_if_fail (GIMP_IS_BRIGHTNESS_CONTRAST_CONFIG (config)); g_return_if_fail (GEGL_IS_NODE (node)); brightness = config->brightness / 2.0; contrast = (config->contrast < 0 ? (config->contrast + 1.0) : config->contrast * 4.0 + 1.0); gegl_node_set (node, "brightness", brightness, "contrast", contrast, NULL); }
GimpLevelsConfig * gimp_brightness_contrast_config_to_levels_config (GimpBrightnessContrastConfig *config) { GimpLevelsConfig *levels; gdouble brightness; gdouble slant; gdouble value; g_return_val_if_fail (GIMP_IS_BRIGHTNESS_CONTRAST_CONFIG (config), NULL); levels = g_object_new (GIMP_TYPE_LEVELS_CONFIG, NULL); brightness = config->brightness / 2.0; slant = tan ((config->contrast + 1) * G_PI_4); if (config->brightness >= 0) { value = -0.5 * slant + brightness * slant + 0.5; if (value < 0.0) { value = 0.0; /* this slightly convoluted math follows by inverting the * calculation of the brightness/contrast LUT in base/lut-funcs.h */ levels->low_input[GIMP_HISTOGRAM_VALUE] = (- brightness * slant + 0.5 * slant - 0.5) / (slant - brightness * slant); } levels->low_output[GIMP_HISTOGRAM_VALUE] = value; value = 0.5 * slant + 0.5; if (value > 1.0) { value = 1.0; levels->high_input[GIMP_HISTOGRAM_VALUE] = (- brightness * slant + 0.5 * slant + 0.5) / (slant - brightness * slant); } levels->high_output[GIMP_HISTOGRAM_VALUE] = value; } else { value = 0.5 - 0.5 * slant; if (value < 0.0) { value = 0.0; levels->low_input[GIMP_HISTOGRAM_VALUE] = (0.5 * slant - 0.5) / (slant + brightness * slant); } levels->low_output[GIMP_HISTOGRAM_VALUE] = value; value = slant * brightness + slant * 0.5 + 0.5; if (value > 1.0) { value = 1.0; levels->high_input[GIMP_HISTOGRAM_VALUE] = (0.5 * slant + 0.5) / (slant + brightness * slant); } levels->high_output[GIMP_HISTOGRAM_VALUE] = value; } return levels; }