Взвешенная смесь в библиотеке GEGL

Может кто-нибудь опубликовать пример кода о том, как использовать операции "gegl:weighted-blend" в c Код не gegl (терминал) с XML-файлами (фильтрами) .
Я начал использовать библиотеку gegl, она идеально подходит моим потребностям, но я не могу найти хорошую документацию (сайт хороший, но не детализированный) . Есть ли форум или место, где вы можете обратиться за помощью в программировании с помощью библиотеки gegl?
Если это поможет, вот мое испытание использования gegl:weighted-blend:

GeglNode *gegl = gegl_node_new ();

GeglNode *display     = gegl_node_create_child (gegl, "gegl:display");
GeglNode *over        = gegl_node_new_child (gegl,"operation", "gegl:over",NULL);
GeglNode *c2g         = gegl_node_new_child (gegl,"operation", "gegl:c2g",NULL);
GeglNode *blur        = gegl_node_new_child (gegl,"operation", "gegl:gaussian-blur","std-    dev-x",1.0,"std-dev-y",1.0,NULL);


GeglNode *img         = gegl_node_new_child (gegl,"operation", "gegl:load","path","test.jpg",NULL);
GeglBuffer *buffer    = NULL;
GeglNode *sink        = gegl_node_new_child (gegl,"operation", "gegl:buffer-sink","buffer", &buffer,NULL);
gegl_node_link_many (img , c2g , sink, NULL);
gegl_node_process (sink);
GeglNode *blend       = gegl_node_new_child (gegl,"operation", "gegl:weighted-blend","aux",buffer,"value",0.0,NULL);

gegl_node_link_many(img, blend, display, NULL);
//gegl_node_process (blend);
//gegl_node_link_many(blend, display, NULL);
gegl_node_process (display);

Немного информации, в этом примере у меня есть изображение test.jpg. Я применил фильтр c2g к нему, затем я попытался смешать его с собой без фильтра c2g.
Части c2g и gegl:buffer-sink работают, то есть я могу отображать изображение в оттенках серого, а буфер заполнен изображением в оттенках серого.
Что я делаю неправильно? Потому что результат этого с комбинацией gegl:weighted-blend - пустой экран.

1 ответ

Решение

Есть несколько небольших проблем с вашим кодом прямо сейчас.

  1. Вы неправильно подключаетесь к блоку "aux" операции взвешенного смешивания. Правильный способ подключения выхода c2g к входу взвешенного смешивания: gegl_node_connect_to (c2g, "output", blend, "aux");, Прямо сейчас вы пытаетесь установить его как свойство узла взвешенного смешивания, но входные площадки (изображения) и свойства - это разные понятия в gegl.
  2. Взвешенный узел не имеет value свойство, и использование его может быть сложно в этом случае, если вам нужно настроить количество смешивания. Лучший способ построить график - применить gegl:opacity установить прозрачность верхнего изображения, а затем использовать svg:src-over смешать их вместе (что примерно соответствует тому, что делает стек слоев в gimp).

Итак, исправление вашего примера может выглядеть так:

GeglNode *gegl = gegl_node_new ();

GeglNode *img     = gegl_node_new_child (gegl,
                                         "operation", "gegl:load",
                                         "path", "test.jpg",
                                         NULL);

GeglNode *save    = gegl_node_new_child (gegl,
                                         "operation", "gegl:save",
                                         "path","result.jpg",
                                         NULL);

GeglNode *over    = gegl_node_new_child (gegl,
                                         "operation", "gegl:over",
                                         NULL);

GeglNode *c2g     = gegl_node_new_child (gegl,
                                         "operation", "gegl:c2g",
                                         NULL);

GeglNode *opacity = gegl_node_new_child (gegl,
                                         "operation", "gegl:opacity",
                                         "value", 0.4, NULL);

GeglNode *blend   = gegl_node_new_child (gegl,
                                         "operation", "svg:src-over",
                                         NULL);

gegl_node_link_many (img, c2g, opacity, NULL);
gegl_node_connect_to (opacity, "output", blend, "aux");
gegl_node_link_many (img, blend, save, NULL);

gegl_node_process (save);
Другие вопросы по тегам