微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Skia Sharp 创建以文本为中心的完美圆圈

如何解决使用 Skia Sharp 创建以文本为中心的完美圆圈

我想创建一个圆圈,中间有一些文字,基本上是月份和日期。

所以我已经尝试过这个例子。 我正在使用 Xamrain 表单,因此这些示例从外观上看是面向 winforms 的,我将如何将其更改为 xamrian 表单。

https://gist.github.com/xoofx/a9d08a37c43f692e65df80a1888c488b

public CircleLabel()
{
        var resizefactor = 0.5f;
        var bitmap = SKBitmap.Decode("input.jpg");
        var toBitmap = new SKBitmap((int)Math.Round(bitmap.Width * resizefactor),(int)Math.Round(bitmap.Height * resizefactor),bitmap.ColorType,bitmap.AlphaType);
        var canvas = new SKCanvas(toBitmap);

        // Draw a bitmap rescaled
        canvas.SetMatrix(SKMatrix.MakeScale(resizefactor,resizefactor));
        canvas.DrawBitmap(bitmap,0);
        canvas.ResetMatrix();

        var font = SKTypeface.FromFamilyName("Arial");
        var brush = new SKPaint
        {
            Typeface = font,TextSize = 64.0f,IsAntialias = true,Color = new SKColor(255,255,255)
        };
        canvas.DrawText("Jun!",bitmap.Height * resizefactor / 2.0f,brush);
        canvas.DrawText("26",brush);

        canvas.Flush();

        var image = SKImage.FromBitmap(toBitmap);
        var data = image.Encode(SKEncodedImageFormat.Jpeg,90);

        using (var stream = new FileStream("output.jpg",FileMode.Create,FileAccess.Write))
        {
            data.Saveto(stream);

        }
        imageCircle.source = "output.jpg";
        data.dispose();
        image.dispose();
        canvas.dispose();
        brush.dispose();
        font.dispose();
        toBitmap.dispose();
        bitmap.dispose();
}

理想情况下,我希望在列表视图中使用它,但不知道如何实现。现在我正在创建一个自定义控件,然后我可以在列表视图中使用它。 我基本上是想重新创建您在 Synfusions 日历组件中看到的紫色圆圈。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。