Использовать сгенерированное изображение как образец внутри каирской графики - PullRequest
0 голосов
/ 27 января 2020

Я просмотрел примеры графики Каира, используя шаблон.

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

Теперь вместо «изображения» у меня есть поверхность с последовательностью: -

cairo_move_to(cr, xc[0], yc[0]);
    for (int i = 0; i < xc.size(); i++)
        cairo_line_to(cr, xc[i], yc[i]);

Как использовать эту сгенерированную поверхность Каира и использовать ее в качестве входных данных для шаблона? Это не работает, если я просто использую pattern = cairo_pattern_create_for_surface (surface);, где у поверхности есть cairo_t cr.

1 Ответ

0 голосов
/ 27 января 2020

Это не работает, если я просто использую pattern = cairo_pattern_create_for_surface (surface); где у поверхности есть cairo_t cr.

Да, это так.

Следующий код dr aws крест на поверхность 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, 0);
    cairo_line_to(cr, 10, 10);
    cairo_move_to(cr, 10, 0);
    cairo_line_to(cr, 0, 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;
}
...