为什么 Cairo 无法填充字体路径?

问题描述

我有以下代码可以在开罗表面上绘制文本。

void CairoImage::drawText(const std::string &text,const FontDescription &font,const RGBA &color,int32_t x,int32_t y,bool outline) {
    auto layout = TextLayout::create(context);

    layout->set_font_description(font);

    layout->set_text(text);

    context->save();

    context->move_to(x,y);

    layout->add_to_cairo_context(context);

    if (outline) {
        auto outlineColor = color.getoutlineColor();

        context->set_source_rgba(outlineColor.r,outlineColor.g,outlineColor.b,outlineColor.a);

        context->set_line_cap(LineCap::LINE_CAP_ROUND);

        context->set_line_width(font.get_size() * 0.05);

        context->stroke_preserve();
    }

    context->set_source_rgba(color.r,color.g,color.b,color.a);

    context->fill();

    context->restore();
}

当我尝试如下使用它时:

    auto font = buildFont("Consolas",FontSlant::SLANT_norMAL,FontWeight::WEIGHT_norMAL,48);

    auto canvas = CairoImage(1280,720);

    canvas.fill(RGBA(255,0));

    canvas.drawText("Hello,normal!",font,RGBA(0),0);
    canvas.drawText("Hello,outlined!",120);

    canvas.saveAsPNG("..\\test.png");

它给了我一个纯黑色图像作为输出。 但是,使用 show_in_cairo_context 可以解决问题,但在这种情况下,据我所知,我将无法绘制轮廓。 另外,如果我不填充文本,它会被正确绘制。 这种行为的原因是什么?

UPD: 哎呀...发现Pango 生成的路径应该是自己抚摸,而不是填充。那么,问题是如何为文本添加大纲?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...