使用模式生成时访问cairo_path_t



我对在cairo中绘制各种路径很感兴趣。然后通过cairo_path_t和cairo_path _data_t访问这些路径以供pango使用。当我使用模式时,这就成了一个问题。例如,以下代码非常有效。

cairo_surface_t* pat_surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 2 * 500, 1000);
cairo_t* pat;

if (pat_surf)
pat = cairo_create(pat_surf);

cairo_translate(pat, amp, line_width);
cairo_move_to(pat, 0, 0);
cairo_line_to(pat, 500, 500);
cairo_translate(pat, -500, 0);

我可以使用pat访问路径。但是,如果我将其用作重复模式。路径丢失。

cr = cairo_create(result_surface);
cairo_pattern_t* pattern1 = cairo_pattern_create_for_surface(pat_surf);
cairo_pattern_set_extend(pattern1, CAIRO_EXTEND_REPEAT);
cairo_translate(cr, 200, 400);
cairo_set_source(cr, pattern1);
cairo_translate(cr, -200, -400);

我无法使用cr访问任何路径。作为测试,如果我添加一个矩形来定义窗口,则只有窗口路径可见。重复模式消失。

cairo_rectangle(cr, 0, 200, 1000, 400);

知道我做错了什么吗?

cairo_path_t用于表示路径。但是,您的代码包含以下行:

cairo_set_source(cr, pattern1);

源与路径不同。因此,改变源当然不会改变路径。

稍有不同:

  • 源定义了";颜色";用于绘图,其中";颜色";用引号括起来,因为它也可以是一个渐变,甚至是一个完整的曲面
  • 路径定义要用于绘制的源的哪些部分

请参阅https://www.cairographics.org/tutorial/#L3source和https://www.cairographics.org/tutorial/#L3path(也许还有整个教程,因为我链接到的部分有点密集(。

相关内容

  • 没有找到相关文章

最新更新