无法在cairo中呈现文本

8

我是cairo的新手,已经阅读了它网站上的教程和文档。我现在可以制作线条、矩形,基本上可以渲染图像但无法处理文字。

我正在使用以下代码:

cairo_select_font_face (cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAl);

    cairo_set_font_size (cr, 14);

    cairo_set_source_rgb (cr, 1, 1, 1);

    cairo_move_to (cr, 50, 50);

    cairo_show_text (cr, "Print Something");

请问有人能指出我的错误吗?


下面的答案似乎不是 - 但是看起来你正在使用白色绘图,这是有意为之的吗?(这实际上是我类似问题的解决方案,我必须明确设置source_rgb)。 - gauteh
1个回答

2

和cairo邮件列表上的回答一样(似乎在某个地方丢失了):

你没有做错任何事情(嗯,也许使用玩具文本API有点问题,但仍然应该可以工作),你的代码对我来说很好用。这是我测试过的完整代码:

#include <cairo.h>
int main()
{
        cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 200, 200);
        cairo_t *cr = cairo_create(surface);
        cairo_surface_destroy(surface);

        /* Fill everything with white */
        cairo_set_source_rgb(cr, 1, 1, 1);
        cairo_paint(cr);

        /* Draw some text */
        cairo_select_font_face (cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
        cairo_set_font_size (cr, 14);
        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_move_to (cr, 0, 50);
        cairo_show_text (cr, "Print Something");

        cairo_surface_write_to_png(cairo_get_target(cr), "out.png");
        cairo_destroy(cr);
        return 0;
}

嗨,谢谢。我不确定我的问题出在哪里。我尝试了您编写的相同代码,但我没有看到任何东西。希望我能很快解决它。然后,我会在这里发布出错的内容。 - Techie Help
1
以上完整示例对您无效吗?您使用的是哪个cairo版本?在调用cairo_destroy()之前,您可以添加printf("%d\n", (int) cairo_status(cr));吗?我认为这应该打印0,如果一切正常的话。 - Uli Schlachter
我打印出来得到了35(即“cairo状态设备错误”)。但是如果我尝试绘制一个矩形,我可以看到它,那么为什么文本会出错? - Techie Help
你正在使用哪个cairo后端?从cairo的源代码来看,CAIRO_STATUS_DEVICE_ERROR总是某种后端特定的错误。如果你有调试器:在_cairo_error()上设置断点,以查看出了什么问题。 - Uli Schlachter
1
什么是GCM?这似乎不是cairo的一部分(我猜这意味着你没那么幸运了)。 - Uli Schlachter
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接