2

从 1.55.0 版开始,SkiaSharp 支持读取 SVG 文件。该软件包已在几天前(2016 年 11 月 10 日)发布,我找不到足够的文档来说明如何使用它。

需要以下软件包: SkiaSharp 1.55.0 SkiaSharp Views & Layers 1.55.0 SkiaSharp.Svg 1.55.0-beta1

第一个问题是在 Xamarin.Android 中加载 SKSvg 的最佳方式是什么?

4

3 回答 3

7

这里有两种可能的解决方案来开始使用 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,包括(如果是这种情况)资产文件夹内的路径(例如“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 的文件名,没有扩展名。

于 2016-11-19T12:34:43.647 回答
1

要完成已接受的答案,以下是如何SKSvg从 URL 加载。

SkiaSharp.Extended.Svg.SKSvg svg = new SkiaSharp.Extended.Svg.SKSvg();
using (WebClient client = new WebClient())
{
     svg.Load(new MemoryStream(client.DownloadData(new Uri(ResourceUrl))));
}
于 2019-03-26T21:44:38.487 回答
0

我正在使用此代码,效果很好。我可以在 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);
}
}
}
于 2020-05-20T14:29:10.747 回答