1

我正在尝试在 Gimp C 插件中使用 GEGL。我想要的是为某个矩形单独缩放 R、G 和 B 值。

我尝试了下面的代码片段,但它没有更新任何像素(drawable_id、x1、y1、宽度、高度在此代码之外定义

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将每个颜色通道与一个单独的值相乘?在那种情况下,我想知道改用什么功能。

4

0 回答 0