84 const int new_version)
86 if(old_version == 1 && new_version == 2)
88 typedef struct dt_iop_invert_params_v1_t
91 } dt_iop_invert_params_v1_t;
93 dt_iop_invert_params_v1_t *o = (dt_iop_invert_params_v1_t *)old_params;
97 n->color[1] = o->color[1];
98 n->color[2] = o->color[2];
103 double RGB_to_CAM[4][3];
111 fprintf(stderr,
"[invert] `%s' color matrix not found for 4bayer image\n", camera);
112 dt_control_log(_(
"`%s' color matrix not found for 4bayer image"), camera);
133 return _(
"this module is deprecated. please use the negadoctor module instead.");
140 _(
"linear, raw, display-referred"),
142 _(
"linear, raw, display-referred"));
172 GdkRGBA color = (GdkRGBA){.red =
p->color[0], .green =
p->color[1], .blue =
p->color[2], .alpha = 1.0 };
183 color.green =
rgb[1];
187 gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(
g->colorpicker), &color);
196 if(grayrgb[0] == old[0] && grayrgb[1] == old[1] && grayrgb[2] == old[2] && grayrgb[3] == old[3])
return;
220 gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(widget), &c);
222 p->color[1] = c.green;
223 p->color[2] = c.blue;
232 p->color[0] =
p->color[1] =
p->color[2] = 0.21f*c.red + 0.72f*c.green + 0.07f*c.blue ;
247 = {
d->color[0] *
m[0],
d->color[1] *
m[1],
d->color[2] *
m[2],
d->color[3] *
m[3] };
255 const uint8_t(*
const xtrans)[6] = (
const uint8_t(*
const)[6])piece->
dsc_in.
xtrans;
257 const float *
const in = (
const float *
const)ivoid;
258 float *
const out = (
float *
const)
ovoid;
263 for(
int j = 0; j < roi_out->
height; j++)
265 for(
int i = 0;
i < roi_out->
width;
i++)
267 const size_t p = (size_t)j * roi_out->
width +
i;
268 out[
p] = CLAMP(film_rgb_f[
FCxtrans(j,
i, roi_out, xtrans)] - in[
p], 0.0f, 1.0f);
275 for(
int j = 0; j < roi_out->
height; j++)
277 for(
int i = 0;
i < roi_out->
width;
i++)
279 const size_t p = (size_t)j * roi_out->
width +
i;
280 out[
p] = CLAMP(film_rgb_f[
FC(j + roi_out->
y,
i + roi_out->
x, filters)] - in[
p], 0.0f, 1.0f);
290 for(
int c = 0; c < 3; c++)
292 const size_t p = (size_t)
k + c;
293 out[
p] =
d->color[c] - in[
p];
322 g->RGB_to_CAM,
g->CAM_to_RGB,
326 fprintf(stderr,
"[invert] `%s' color matrix not found for 4bayer image\n", camera);
327 dt_control_log(_(
"`%s' color matrix not found for 4bayer image"), camera);
341 for(
int k = 0;
k < 4;
k++)
d->color[
k] =
p->color[
k];
379 gtk_box_pack_start(GTK_BOX(self->
widget), GTK_WIDGET(
g->label),
TRUE,
TRUE, 0);
382 gtk_box_pack_start(GTK_BOX(self->
widget), GTK_WIDGET(
g->pickerbuttons),
TRUE,
TRUE, 0);
384 GdkRGBA color = (GdkRGBA){.red =
p->color[0], .green =
p->color[1], .blue =
p->color[2], .alpha = 1.0 };
385 g->colorpicker = gtk_color_button_new_with_rgba(&color);
386 gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(
g->colorpicker),
FALSE);
387 gtk_color_button_set_title(GTK_COLOR_BUTTON(
g->colorpicker), _(
"select color of film material"));
389 gtk_box_pack_start(GTK_BOX(
g->pickerbuttons), GTK_WIDGET(
g->colorpicker),
TRUE,
TRUE, 0);
static const dt_aligned_pixel_simd_t const dt_adaptation_t const float p
void dt_iop_color_picker_reset(dt_iop_module_t *module, gboolean keep)
GtkWidget * dt_color_picker_new(dt_iop_module_t *module, dt_iop_color_picker_kind_t kind, GtkWidget *w)
__DT_CLONE_TARGETS__ int dt_colorspaces_conversion_matrices_rgb(const float adobe_XYZ_to_CAM[4][3], double out_RGB_to_CAM[4][3], double out_CAM_to_RGB[3][4], const float *embedded_matrix, double mul[4])
void dt_colorspaces_rgb_to_cygm(float *out, int num, double RGB_to_CAM[4][3])
__DT_CLONE_TARGETS__ void dt_colorspaces_cygm_to_rgb(float *out, int num, double CAM_to_RGB[3][4])
static dt_aligned_pixel_t rgb
const dt_colormatrix_t dt_aligned_pixel_t out
gboolean dt_image_is_monochrome(const dt_image_t *img)
void dt_control_log(const char *msg,...)
void dt_control_queue_redraw_widget(GtkWidget *widget)
threadsafe request of redraw of specific widget. Use this function if you need to redraw a specific w...
#define dt_free_align(ptr)
static void * dt_calloc_align(size_t size)
#define DT_MODULE_INTROSPECTION(MODVER, PARAMSTYPE)
#define __DT_CLONE_TARGETS__
#define for_four_channels(_var,...)
#define __OMP_PARALLEL_FOR_SIMD__(...)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
static int FCxtrans(const int row, const int col, global const unsigned char(*const xtrans)[6])
static int FC(const int row, const int col, const unsigned int filters)
#define dt_dev_add_history_item(dev, module, enable, redraw)
@ DT_DEV_PIXELPIPE_DISPLAY_MASK
#define DT_GUI_BOX_SPACING
const char ** dt_iop_set_description(dt_iop_module_t *module, const char *main_text, const char *purpose, const char *input, const char *process, const char *output)
#define IOP_GUI_ALLOC(module)
const char ** description(struct dt_iop_module_t *self)
static void gui_update_from_coeffs(dt_iop_module_t *self)
__DT_CLONE_TARGETS__ int process(struct dt_iop_module_t *self, const dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece, const void *const ivoid, void *const ovoid)
void commit_params(struct dt_iop_module_t *self, dt_iop_params_t *params, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
void gui_update(dt_iop_module_t *self)
Refresh GUI controls from current params and configuration.
static void colorpicker_callback(GtkColorButton *widget, dt_iop_module_t *self)
void init_pipe(struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
void output_format(dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece, dt_iop_buffer_dsc_t *dsc)
void gui_init(dt_iop_module_t *self)
void reload_defaults(dt_iop_module_t *self)
int default_colorspace(dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_iop_t *piece)
void cleanup_pipe(struct dt_iop_module_t *self, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
const char * deprecated_msg()
void color_picker_apply(dt_iop_module_t *self, GtkWidget *picker, dt_dev_pixelpipe_t *pipe, dt_dev_pixelpipe_iop_t *piece)
int legacy_params(dt_iop_module_t *self, const void *const old_params, const int old_version, void *new_params, const int new_version)
float *const restrict const size_t k
float *const restrict const size_t const size_t ch
float dt_aligned_pixel_t[4]
GtkWidget * dtgtk_reset_label_new(const gchar *text, dt_iop_module_t *module, void *param, int param_size)
void dtgtk_reset_label_set_text(GtkDarktableResetLabel *label, const gchar *str)
#define DTGTK_RESET_LABEL(obj)
struct _GtkWidget GtkWidget
struct dt_gui_gtk_t * gui
struct dt_develop_t * develop
dt_iop_buffer_dsc_t dsc_out
dt_iop_buffer_dsc_t dsc_in
struct dt_iop_module_t *void * data
struct dt_develop_t * dev
char camera_makermodel[128]
float d65_color_matrix[9]
float adobe_XYZ_to_CAM[4][3]
dt_aligned_pixel_t processed_maximum
GtkDarktableResetLabel * label
int32_t hide_enable_button
struct dt_develop_t * dev
dt_iop_gui_data_t * gui_data
dt_aligned_pixel_t picked_color
Region of interest passed through the pixelpipe.