gpt4 book ai didi

android - 如何在 Xamarin 上使用 SkiaSharp 绘制日语文本

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:06 26 4
gpt4 key购买 nike

现在我在 Xamarin Android 上使用 SkiaSharp。

我想用 SKCanvas.DrawText 画日文,但是日文字符是乱码。

我看到了 similar question , 所以我尝试将文本转换为 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 ,您可以将它添加到每个 native 平台项目,然后通过该 native 项目或基于 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));

绘制文本:

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);
}
}

安卓:

enter image description here

苹果:

enter image description here

关于android - 如何在 Xamarin 上使用 SkiaSharp 绘制日语文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com