首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GEGL库中的加权混合

GEGL库中的加权混合
EN

Stack Overflow用户
提问于 2014-10-05 18:00:39
回答 1查看 342关注 0票数 2

有人能给出一个代码示例,说明如何在c代码中使用“gegl :加权-混合”操作,而不是使用带有xml文件(过滤器)的gegl(终端)。

我开始使用gegl库,它完全符合我的需要,但我似乎找不到一个好的文档(网站是好的,但不详细)。在使用gegl库进行编程时,是否有一个论坛或地方可以请求帮助?

如果这有帮助的话,那就是我尝试使用gegl:加权-混合:

代码语言:javascript
复制
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:加权混合的组合的输出是一个空白屏幕。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-21 22:45:37

您的代码现在有几个小问题。

  1. 你不正确地连接到加权混合操作的“辅助”面板。将c2g输出连接到加权混合输入的正确方法是gegl_node_connect_to (c2g, "output", blend, "aux");。现在,您正在尝试将其设置为加权混合节点的属性,但是在gegl中,输入pad(图像)和属性是不同的概念。
  2. 加权混合节点没有value属性,如果需要调整混合量,在这种情况下使用它可能会很棘手。构建图形的一个更好的方法是应用gegl:opacity设置顶部图像的透明度,然后使用svg:src-over将它们混合在一起(这大致就是gimp中的层堆栈所做的)。

因此,修复您的示例可能如下所示:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26205586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档