gpt4 book ai didi

使用 cairo 绘制点时剪裁

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:10 25 4
gpt4 key购买 nike

我有一个简单的 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;
}

生成以下正确输出:

here

如果我移动

cairo_stroke(cr);

在 for 循环之外,则会生成以下不正确的输出:

output .

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

最佳答案



#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

关于使用 cairo 绘制点时剪裁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com