簡體   English   中英

使用 SkiaSharp 在 Xamarin 中加載 SVG 文件

[英]Load SVG file in Xamarin with SkiaSharp

從 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 的最佳方法是什么?

這里有兩種可能的解決方案來開始與 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;
    }
}

在這種情況下,文件位於資源子文件夾“raw”中,“svgName”是我們的 svg 的文件名,沒有擴展名。

要完成接受的答案,這里是如何從 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))));
}

我正在使用此代碼,效果很好。 我可以在 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);
}
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM