2014-10-05 4 views
2

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

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: работа с буфером, что означает, что я могу отображать изображение с оттенками серого, и буфер заполняется изображением в оттенках серого.
Что я делаю неправильно? Потому что результат этого с комбинацией gegl: weighted-blend - пустой экран.

ответ

0

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

  1. Неправильно подключен к «вспомогательной» подушке весовой смеси. Правильный способ подключения выхода 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); 
+0

поблагодарить у очень много сэр, но u've пропустил Баунти XD. –