簡體   English   中英

如何在Xamarin上使用SkiaSharp繪制日文文本

[英]How to draw Japanese text with SkiaSharp on Xamarin

現在我在Xamarin Android上使用SkiaSharp。

我想用SKCanvas.DrawText繪制日文文本,但是日文字符是亂碼。

我看到了類似的問題 ,所以我嘗試將文本轉換為UTF-8,但結果是一樣的。

我嘗試過如下。

var s = "abcあいう123壱弐參";
var buf = System.Text.Encoding.UTF8.GetBytes(s);
var utf8s = Encoding.UTF8.GetString(buf);
skcanvas.DrawText(utf8s, 50, 50, paint);

另一個。

var s = "abcあいう123壱弐參";
var dest = Encoding.UTF8;
var src = Encoding.Default;
var buf = src.GetBytes(s);
var buf2 = Encoding.Convert(src,dest, buf);
var utf8s = dest.GetString(buf2);
skcanvas.DrawText(utf8s, 50, 50, paint);

兩個結果都是一樣的。 “abc”和“123”畫得很好,但是日文字符是亂碼。

任何的想法?

假設您正在加載自定義字體,例如Uzumasa Honmaru Gothic ,您可以將其添加到每個本機平台項目中,然后通過該本機項目或基於Xamarin.Forms的項目使用它:

安卓:

string fontName = "UzumasaFontMini.otf";
string fontPath = Path.Combine (CacheDir.AbsolutePath, fontName);
using (var asset = Assets.Open (fontName))
using (var dest = File.Open (fontPath, FileMode.Create)) {
    asset.CopyTo (dest);
}
string customFontPath = fontPath;

iOS版:

string fontName = "UzumasaFontMini.otf";
string customFontPath = NSBundle.MainBundle.PathForResource (Path.GetFileNameWithoutExtension (fontName), Path.GetExtension (fontName));

DrawText的:

string text = "abcあいう123";
using (var paint = new SKPaint ()) {
    canvas.Clear (SKColors.Black);
    paint.IsAntialias = true;

    using (var tf = SKTypeface.FromFile (customFontPath)) {
        paint.Color = SKColors.White;
        paint.TextSize = 20;
        paint.Typeface = tf;

        canvas.DrawText (text, 50, 50, paint);
    }
}

安卓:

在此輸入圖像描述

iOS版:

在此輸入圖像描述

你可以使用“matchCharacter()”,輸入參數可能只是一個日文字符,比如“あ”

var japanese = fontManager.MatchCharacter("Courier New", '年')
paint.Typeface = japanese;
canvas.DrawText("abcあいう123", x, 300, paint);

參考鏈接: https//github.com/mono/SkiaSharp/blob/master/samples/SkiaSharpSample.Shared/Samples/UnicodeTextSample.cs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM