我的问题是:文本无法显示在画布上
SKPaint _paint = new SKPaint();
using(Stream stream = _assembly.GetManifestResourceStream(fontPath))
{
_paint.Typeface = SKTypeface.FromStream(stream);
}
canvas.DrawText ("12345",X,Y,_paint);
如果我不使用"使用块"或"处置",它就像一个魅力。
但如果我这样做,在它到达画布之前。DrawText, _paint 不为 null,但 FontMetrics、FontSpacing 或 TextSize 中的所有值都等于 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/
返回给定流的新字体。流的所有权已转移,因此调用方不得再次引用它。