WPF 解決 Skia 因為找不到字型而繪製不出中文字元
阿新 • • 發佈:2020-09-12
在 WPF 使用 Skia 做渲染工具,如果繪製的中文都是方塊,也許是字型的問題。字型的問題是 Skia 沒有找到字型,本文告訴大家如何修復
在 Skia 使用特定字型,可以使用 SkiaSharp 的 SKTypeface 方法指定
var name = "微軟雅黑";
var skTypeface = SKTypeface.FromFamilyName(name);
但是如何判斷 Skia 找不到字型?可以判斷字型名
var name = "微軟雅黑"; var skTypeface = SKTypeface.FromFamilyName(name); if (skTypeface.FamilyName != name) { // 字型載入失敗了 }
解決方法是通過 WPF 輔助拿到字型,請看程式碼
var fontFamily = new FontFamily(name); foreach (var familyNamesValue in fontFamily.FamilyNames.Values) { skTypeface = SKTypeface.FromFamilyName(familyNamesValue); if (skTypeface.FamilyName == familyNamesValue) { break; } }
上面程式碼存在的坑是 SKTypeface 是需要手動釋放的資源,因此優化的程式碼如下
var name = "微軟雅黑"; var skTypeface = SKTypeface.FromFamilyName(name); if (skTypeface.FamilyName != name) { // 字型載入失敗了 skTypeface.Dispose(); } var fontFamily = new FontFamily(name); foreach (var familyNamesValue in fontFamily.FamilyNames.Values) { skTypeface = SKTypeface.FromFamilyName(familyNamesValue); if (skTypeface.FamilyName == familyNamesValue) { break; } else { skTypeface.Dispose(); } }
需要在繪製之後呼叫 Dispose 釋放字型