0

我对在开罗绘制各种路径很感兴趣。然后通过 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);

知道我做错了什么吗?

4

1 回答 1

0

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

cairo_set_source(cr, pattern1);

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

有点不同:

  • 源定义了用于绘图的“颜色”,其中“颜色”用引号引起来,因为它也可以是渐变甚至整个表面。
  • 路径定义了源的哪些部分用于绘图。

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

于 2021-07-04T11:04:22.637 回答