我在SkiaSharp中渲染emoji,并且已经能够让它正确地工作于简单的emoji(如或),但不能正确地工作于更复杂的emoji(如或)。👩🏼🎨👶🏻😂👶
最棘手的部分是设置包含表情符号的正确字体,因为不支持这里提到的后备字体:https://github.com/mono/SkiaSharp/issues/232
下面是我使用的代码的简化版本:
int GrinningFaceEmoji = 0x1f600;
void DrawEmoji(SKCanvas canvas, string emoji, int x, int y) {
SKPaint paint = new SKPaint();
paint.Typeface = SKFontManager.CreateDefault().MatchCharacter(GrinningFaceEmoji);
canvas.DrawText(emoji, x, y, vtsm.paint);
}
字符串
当emoji
是一个简单的表情符号时,它可以完美地工作,但更复杂的表情符号会显示为多个字符。浅色婴儿显示为两个字符-黄色婴儿后跟一个彩色正方形。艺术家显示为三个字符。我目前正在macOS上测试这一点。
1条答案
按热度按时间xkftehaa1#
为了呈现复杂的文本,如彩色表情符号或阿拉伯语等形状的文本,您只需使用
SKCanvas.DrawShapedText
而不是
SKCanvas.DrawText
。此扩展方法驻留在
SkiaSharp.HarfBuzz.CanvasExtensions
静态类中。