首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Xamarin上用SkiaSharp绘制日文文本

如何在Xamarin上用SkiaSharp绘制日文文本
EN

Stack Overflow用户
提问于 2016-06-09 19:40:15
回答 2查看 1.7K关注 0票数 3

现在我在Xamarin Android上使用SkiaSharp。

我想用SKCanvas.DrawText绘制日文文本,但是日文字符乱码了。

我看到了这个similar question,所以我尝试将文本转换为UTF-8,但结果是相同的。

我尝试了下面的方法。

代码语言:javascript
复制
var s = "abcあいう123壱弐参";
var buf = System.Text.Encoding.UTF8.GetBytes(s);
var utf8s = Encoding.UTF8.GetString(buf);
skcanvas.DrawText(utf8s, 50, 50, paint);

再来一次。

代码语言:javascript
复制
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”画得很好,但日文字符乱码。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-06-09 23:09:35

假设您正在加载一个自定义字体,如Uzumasa Honmaru Gothic,您可以将其添加到每个本机平台项目中,然后通过该本机项目或Xamarin.Forms-based项目使用它:

Android:

代码语言:javascript
复制
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:

代码语言:javascript
复制
string fontName = "UzumasaFontMini.otf";
string customFontPath = NSBundle.MainBundle.PathForResource (Path.GetFileNameWithoutExtension (fontName), Path.GetExtension (fontName));

DrawText:

代码语言:javascript
复制
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);
    }
}

Android:

iOS:

票数 5
EN

Stack Overflow用户

发布于 2018-01-16 01:25:55

您可以使用"matchCharacter()",输入参数可能只是一个日语字符,如"あ“

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37724960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档