在 XF 中加载 svg 图像的 luberda-molinet/FFImageLoading 代码是否有任何替代方法

Sam*_*tar 5 xamarin xamarin.forms

luberda-molinet/FFImageLoading 中的代码在大多数情况下对我来说效果很好,但我发现有时我的图像无法在 iOS 上正确加载。可能这也是 Android 上的一个问题,但我还没有研究过这个问题。下面是一个例子:

在此处输入图片说明

标题图标和语言图标背后的代码是相同的。要解决这个问题,我需要关闭应用程序并再次打开它,标题图标将正确显示,但另一个图标可能没有正确的高度。这是图标背后的代码:

    <Frame x:Name="SvgFrame"
           Grid.Column="0"
           VerticalOptions="Center"
           BackgroundColor="{Binding IconBackgroundColor,  Source={x:Reference this}}"
           CornerRadius="5"
           Padding="4" HasShadow="False">
            <ffimageloadingsvg:SvgCachedImage Source="{Binding IconSource, Source={x:Reference this}}" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
    </Frame>
Run Code Online (Sandbox Code Playgroud)

Sre*_*air 6

您可以在运行时使用SkiaSharp从 SVG 文件创建图像。

SKSvg svg = new SKSvg();
svg.Load(**Your SVG stream or file**);
using (SKBitmap bitmap = new SKBitmap((int)svg.CanvasSize.Width, (int)svg.CanvasSize.Height))
using (SKCanvas canvas = new SKCanvas(bitmap))
{
    canvas.DrawPicture(svg.Picture);
    canvas.Flush();
    canvas.Save();

    using (SKImage image = SKImage.FromBitmap(bitmap))
    using (SKData data = image.Encode(SKEncodedImageFormat.Png, 80))
    using (MemoryStream memStream = new MemoryStream())
    {
        data.SaveTo(memStream);
        memStream.Seek(0, SeekOrigin.Begin);

        using (SKManagedStream skStream = new SKManagedStream(memStream))
        {
            _bitmap?.Dispose();
            _bitmap = SKBitmap.Decode(skStream);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该代码未经过测试,因此您可能需要检查。让我知道这是否有帮助!