首页 文章

画布中的DrawText(SkiaSharp):不显示文本

提问于
浏览
0

我的问题是:文本不显示在画布上

SKPaint _paint = new SKPaint();
using(Stream stream = _assembly.GetManifestResourceStream(fontPath))
{
_paint.Typeface = SKTypeface.FromStream(stream);
}

canvas.DrawText ("12345",X,Y,_paint);

如果我不使用“使用块”或“处理”,它就像一个魅力 .

但是,如果我这样做,在它到达canvas.DrawText之前,_paint不为null,但FontMetrics,FontSpacing或TextSize中的所有值都等于0 .

然后画布上没有文字 .

我很困惑,你能给我一些建议吗?

谢谢 .

1 回答

  • 0

    发生这种情况的原因是您正在处理流然后尝试使用它 . SKTypeface 拥有流的所有权,您不能自己关闭它 . 当字体不再使用时,它可能决定关闭流 .

    使用它的正确方法是打开流,将其传递给 SKTypeface 然后只是担心字体:

    SKPaint _paint = new SKPaint();
    Stream stream = _assembly.GetManifestResourceStream(fontPath);
    _paint.Typeface = SKTypeface.FromStream(stream);
    
    canvas.DrawText ("12345", X, Y,_paint);
    

    https://developer.xamarin.com/api/member/SkiaSharp.SKTypeface.FromStream/p/System.IO.Stream/System.Int32/

    返回给定流的新字体 . 流的所有权被转移,因此呼叫者不得再次引用它 .

相关问题