将生成的图像用作开罗图形中的图案

我已经使用模式浏览了cairo图形示例。

pattern = cairo_pattern_create_for_surface (image);
cairo_pattern_set_extend (pattern,CAIRO_EXTEND_REPEAT);

现在,我有了一个带有:-

序列的表面,而不是“ image”
cairo_move_to(cr,xc[0],yc[0]);
    for (int i = 0; i < xc.size(); i++)
        cairo_line_to(cr,xc[i],yc[i]);

如何使用此生成的cairo曲面并将其用作图案的输入? 如果我只使用它是行不通的 pattern = cairo_pattern_create_for_surface (surface); 表面有cairo_t cr的地方。

zchng 回答:将生成的图像用作开罗图形中的图案

如果我仅使用pattern = cairo_pattern_create_for_surface(surface),则无法使用;表面有cairo_t cr的地方。

是的。

下面的代码在10x10的表面上绘制一个十字,然后在其中填充20x20的表面。

enter image description here

#include <cairo.h>

int main()
{
    cairo_surface_t *pattern_surface = cairo_image_surface_create(
            CAIRO_FORMAT_ARGB32,10,10);
    cairo_surface_t *result_surface = cairo_image_surface_create(
            CAIRO_FORMAT_ARGB32,20,20);
    cairo_t *cr;
    cairo_pattern_t *pattern;

    cr = cairo_create(pattern_surface);
    cairo_move_to(cr,0);
    cairo_line_to(cr,10);
    cairo_move_to(cr,10);
    cairo_stroke(cr);
    cairo_destroy(cr);

    pattern = cairo_pattern_create_for_surface(pattern_surface);
    cairo_pattern_set_extend (pattern,CAIRO_EXTEND_REPEAT);

    cr = cairo_create(result_surface);
    cairo_set_source(cr,pattern);
    cairo_paint(cr);
    cairo_destroy(cr);

    cairo_surface_write_to_png(result_surface,"out.png");

    cairo_surface_destroy(pattern_surface);
    cairo_surface_destroy(result_surface);
    cairo_pattern_destroy(pattern);
    return 0;
}
本文链接:https://www.f2er.com/2706607.html

大家都在问