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 不会为空,但 FontMetrics、FontSpacing 或 TextSize 中的所有值都等于 0。

然后画布上没有文字。

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

谢谢你。

4

1 回答 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/

返回给定流的新字体。流的所有权已转移,因此调用者不得再次引用它。

于 2018-01-13T15:56:53.170 回答