繁体   English   中英

使用cairo绘制点时进行裁剪

[英]Clipping when drawing dots using cairo

我有一个简单的Cairo程序,尝试以600x600 PNG绘制由点组成的对角线。 但是,每当我尝试使用一次对cairo_stroke()的调用来渲染所有点时,输出似乎都会被截断。

具体来说,请考虑以下程序:

#include <cairo/cairo.h>

int main(int argc, char **argv)
{
    cairo_surface_t *surface =
        cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 300, 300);
    cairo_t *cr = cairo_create(surface);
    cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
    cairo_set_source_rgb(cr, 0, 0, 0);
    cairo_set_line_width(cr, 5);
    for (double x = 0.0; x <= 300; x += 10) {
        cairo_move_to(cr, x, x);
        cairo_close_path(cr);
        cairo_stroke(cr);
    }
    cairo_surface_write_to_png(surface, "output.png");
    cairo_destroy(cr);
    cairo_surface_destroy(surface);
    return 0;
}

会产生以下正确输出:

这里

如果我移动

cairo_stroke(cr);

在for循环之外,则会生成以下错误输出:

产量

有人可以解释为什么第二次尝试失败吗? 我怀疑我一定在这里做错了...



    #include <cairo/cairo.h>

    int main(int argc, char **argv)
    {
        cairo_surface_t *surface =
            cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 300, 300);

        cairo_t *cr = cairo_create(surface);
        cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
        cairo_set_source_rgb(cr, 0, 0, 0);
        cairo_set_line_width(cr, 5);

        for (double x = 0.0; x <= 300; x += 10) {
            cairo_move_to(cr, x, x);
            cairo_close_path(cr);
        }

        cairo_stroke(cr); /* moved here */

        cairo_surface_write_to_png(surface, "output.png");
        cairo_destroy(cr);
        cairo_surface_destroy(surface);

        return 0;
    }

cairo_stroke(cr) for循环外似乎会产生与Cairo 1.10.1版相等的输出。

编译为:gcc test.c`pkg-config --libs --cflags gtk + -2.0` -std = c99 -lcairo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM