我有一个简单的开罗程序试图在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循环之外,然后生成以下错误输出:
其他人可以解释为什么第二次尝试失败了吗?我怀疑我一定是在做错事......
答案 0 :(得分:1)
#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;
}
在for-loop之外移动cairo_stroke(cr)
似乎与Cairo版本1.10.1产生相同的输出。
编译为:gcc test.c`pkg-config --libs --cflags gtk + -2.0` -std = c99 -lcairo