问题描述
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 (将#修改为@)