System.ArgumentNullException: '值不能为空。参数名称:输入'Xamarin?

Posted

技术标签:

【中文标题】System.ArgumentNullException: \'值不能为空。参数名称:输入\'Xamarin?【英文标题】:System.ArgumentNullException: 'Value cannot be null. Parameter name: input' Xamarin?System.ArgumentNullException: '值不能为空。参数名称:输入'Xamarin? 【发布时间】:2021-10-23 06:00:40 【问题描述】:

sKSVG.Load(stream) 中的 Xamarin 有问题:

System.ArgumentNullException: 'Value cannot be null. Parameter name: input'
using(Stream stream = typeof(SVGImage).GetTypeInfo().Assembly.GetManifestResourceStream(assembly.Name + ".Images."+ Source))

    SkiaSharp.Extended.Svg.SKSvg sKSVG = new SkiaSharp.Extended.Svg.SKSvg();
    sKSVG.Load(stream);
    SKImageInfo imageInfo = e.Info;
    sKCanvas.Translate(imageInfo.Width / 2f, imageInfo.Height / 2f);
    SKRect rectBounds = sKSVG.ViewBox;
    float xRatio = imageInfo.Width / rectBounds.Width;
    float yRatio = imageInfo.Height / rectBounds.Height;
    float minRatio = Math.Min(xRatio, yRatio);
    sKCanvas.Scale(minRatio);
    sKCanvas.Translate(-rectBounds.MidX, -rectBounds.MidY);
    sKCanvas.DrawPicture(sKSVG.Picture);

【问题讨论】:

请不要将代码或错误作为图片发布 我像@jason 一样发布问题 请edit您的问题添加信息,不要使用回答功能。您还应该发布异常堆栈跟踪 stream 为空。你需要弄清楚原因。 【参考方案1】:

我想你可能忘记为图片资源设置Buidl Action

您可以将其BuildAction 设置为EmbeddedResource

那么你可以得到这样的流:

var type = typeof(MainPage).GetTypeInfo();
var assembly = type.Assembly;
using (Stream stream = assembly.GetManifestResourceStream(assembly.GetName().Name+ ".Images." + "your svg.svg"))
   
       SKSvg sKSvg = new SKSvg();
       sKSvg.Load(stream);
       ...
   

请参阅https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/basics/bitmaps#loading-a-bitmap-resource。

【讨论】:

以上是关于System.ArgumentNullException: '值不能为空。参数名称:输入'Xamarin?的主要内容,如果未能解决你的问题,请参考以下文章