Как масштабировать цветовые каналы с помощью GEGL в плагине GIMP C

Я пытаюсь использовать GEGL в плагине GIMP C. Я хочу масштабировать значения R, G и B индивидуально для определенного прямоугольника.

Я попробовал приведенный ниже фрагмент кода, но он не обновляет пиксели (drawable_id, x1, y1, width, height определены вне этого кода

      GeglBuffer *img_buffer = gimp_drawable_get_buffer(drawable_id);
GeglBuffer *shadow_buffer = gimp_drawable_get_shadow_buffer(drawable_id);

GeglRectangle sub_img;
gegl_rectangle_set(&sub_img, x1, y1, width, height);
GeglColor *col = gegl_color_new("");  // TODO: use free to free or g_object_unref?
gegl_color_set_rgba(col, 0.1, 0.5, 0.7, 1);
gegl_buffer_set_color(shadow_buffer, &sub_img, col);

gegl_render_op(img_buffer, shadow_buffer, "gegl:multiply", NULL);
    
g_object_unref(img_buffer);
g_object_unref(shadow_buffer);
gimp_drawable_merge_shadow(drawable_id, TRUE);  // what kind of merge is this
anyway?

gimp_drawable_update(drawable_id, x1, y1, width, height);
gimp_displays_flush();
gegl_exit();

Что я делаю не так?

Документация при вводе описания ссылки здесь гласит: «... с использованием либо константы, предоставленной в 'value', либо соответствующего пикселя из буфера на вспомогательном элементе в качестве операндов». но, возможно, невозможно умножить каждый цветовой канал на отдельное значение с помощью gegl: multiply? В этом случае я хотел бы знать, какую функцию использовать вместо этого.

0 ответов

Другие вопросы по тегам