使用SkiaSharp在Xamarin中加载SVG文件

zz2j4svz  于 2023-04-18  发布在  其他
关注(0)|答案(3)|浏览(209)

从1.55.0版开始,SkiaSharp支持阅读SVG文件。该软件包几天前(2016年11月10日)发布,我找不到足够的文档来说明如何使用它。
需要以下软件包:滑雪场1.55.0滑雪场视图和图层1.55.0滑雪场服务1.55.0-beta1
第一个问题是在Xamarin.Android中加载SKSvg的最佳方式是什么?

wtzytmuj

wtzytmuj1#

这里有两个可能的解决方案,开始与SkiaSharp合作,这对我来说是有效的:

从Asset文件夹(或子文件夹)加载SVG:

public SKSvg LoadAnSvgFromAssets(Context ctx, string assetSvgFileLoc)
    {
        var assets = ctx.Assets;
        var svg = new SKSvg();
        using (var stream = new StreamReader(assets.Open(assetSvgFileLoc)))
            {
              svg.Load(stream.BaseStream);
              return svg;
            }
    }

其中“assetSvgFileLoc”是要加载的svgFilename.svg,包括(如果是这种情况)Asset文件夹内的路径(例如“subf1/subf2/mysvg.svg”)。

将SVG作为RAW资源加载

public SKSvg LoadAnSvgFromResources(Context ctx, string svgName))
  {
    var resId = ctx.Resources.GetIdentifier(svgName, "raw", ctx.PackageName);           
    var svg = new SKSvg();
    using (var stream = ctx.Resources.OpenRawResource(resId))
    {
        svg.Load(stream);
        return svg;
    }
}

在本例中,该文件位于Resources子文件夹“raw”中,“svgName”是我们的svg的文件名,没有扩展名。

thigvfpy

thigvfpy2#

为了完成接受的答案,下面是如何从URL加载SKSvg

SkiaSharp.Extended.Svg.SKSvg svg = new SkiaSharp.Extended.Svg.SKSvg();
using (WebClient client = new WebClient())
{
     svg.Load(new MemoryStream(client.DownloadData(new Uri(ResourceUrl))));
}
6psbrbz9

6psbrbz93#

我正在使用这个代码,它工作得很好。我可以在PCL,iOS或Android文件夹中拥有SVG。
只要记住在路径中包括程序集。

var assembly = this.GetType().GetTypeInfo().Assembly;
using (var s = assembly.GetManifestResourceStream("MyAssembly.Core.Hold.svg"))
{
    if (s != null)
    {
        svg = new SKSvg();
        svg.Load(s);
        using (SKPaint paint = new SKPaint())
        {
            canvas.DrawPicture(svg.Picture, paint);
        }
    }
}

相关问题