使用模式生成时访问cairo_path_t

问题描述

在开罗绘制各种路径时,我很有趣。然后,通过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);
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,1000,400);

知道我在做什么错吗?

解决方法

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

cairo_set_source(cr,pattern1);

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

有点不同:

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...