c# - 如何使用 Skia 或 SkiaSharp 绘制富文本

标签 c# xamarin skia skiasharp

我想使用 SkiaSharp 绘制富文本,例如 iOS 的属性文本或 Xamarin.Forms 的 FormattedString,但我找不到方法。

我找到了 DrawText 方法,但它用于使用一种颜色和一种字体进行简单的文本呈现。没有混合颜色和/或字体,也没有粗体、斜体、删除线或下划线等样式。

我必须使用我自己的富文本呈现逻辑吗?

最佳答案

这可以使用 SKPaint 类型来实现。基本上,当您绘制时,您可以设置绘画的属性:

var paint = new SKPaint();
paint.StrikeThruText = true;
paint.TextSize = 24;
paint.Color = SKColors.Yellow;
paint.UnderlineText = true;
paint.Typeface = SKTypeface.FromFamilyName(
    "Arial", 
    SKFontStyleWeight.Bold, 
    SKFontStyleWidth.Normal, 
    SKFontStyleSlant.Italic);

然后你就可以画了:

canvas.DrawText("Fancy Text", 30, 30, paint);

希望对您有所帮助!

对于其他效果,您可以使用 SKShaderSKMaskFilter 类型。这确实模糊了:

path.MaskFilter = SKMaskFilter.CreateBlur(SKBlurStyle.Normal, 5);

编辑

一段时间后,似乎我们实际上有了更好的方法来绘制文本 - 而不仅仅是基本的下划线。我会全心全意地推荐 Brad Robinson 的这个图书馆:https://github.com/toptensoftware/RichTextKit

我的意思是,看看那个美丽的东西!

RichTextKit

关于c# - 如何使用 Skia 或 SkiaSharp 绘制富文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706244/

相关文章:

c++ - SKIA::获取 Canvas 内文本的文本高度

android - SIGSEGV 安卓

c# - 在 XML 文件中查找节点 - C# 中的性能改进

xamarin - 如何在默认程序中打开文件?

c# - C#如何获取前一天的名字

xamarin - 在导航栏中间添加 Logo ?

c# - SQLite-Net Extensions如何正确地递归更新对象

android - Android OS 4.1 (Jelly Bean) 使用 HWUI 还是 SKIA?

c# - 使用带有 Entity Framework 的 LINQ 语句以编程方式构建查询

c# - 用代码覆盖excel文件