有人能给出一个代码示例,说明如何在c代码中使用“gegl :加权-混合”操作,而不是使用带有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:加权混合的组合的输出是一个空白屏幕。
发布于 2014-10-21 22:45:37
您的代码现在有几个小问题。
gegl_node_connect_to (c2g, "output", blend, "aux");。现在,您正在尝试将其设置为加权混合节点的属性,但是在gegl中,输入pad(图像)和属性是不同的概念。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);https://stackoverflow.com/questions/26205586
复制相似问题