为什么在调用SKBitmap.Decode时,SkiaSharp无法在UWP中加载某些图像?

4

这太奇怪了。

我正在尝试使用以下代码在 UWP 中使用 StorageFile 加载图像:

using (var stream = await storageFile.OpenStreamForReadAsync())
{
    SKBitmap bitmap = SKBitmap.Decode(stream);
    // the rest
}

然而,一些图片在调用 SKBitmap.Decode 的时候失败,并出现以下错误信息:
Value cannot be null.
Parameter name: buffer

我在调试器中检查流,它不是空的,并且有值。 我甚至将它写在后面:

                        if (stream.CanRead && stream.CanSeek)
                        {
                            stream.Seek(0, SeekOrigin.Begin);
                        }

这些文件总是失败。例如,其中一个是这个:

enter image description here

我不确定其他人是否能够通过我上传到SO的这张图片来重现它。

此外,我已经打开了所有限制,因此不是关于权限的问题。这张照片可以通过调用GetThumbnailAsync来显示,所以应用程序设置是正确的。


现在是最奇怪的事情。如果我这样做:

                        SKImage img = SKImage.FromEncodedData(stream);
                        SKBitmap bitmap = SKBitmap.FromImage(img);

它适用于那些照片!

这让我疯狂!

我的意思是,我找到了一种使它工作的方法,但为什么呢?


我刚遇到了我的一张图片出现了同样的错误。有什么解决方法吗? - Ivaylo
3
我对这个问题有一个解决方案,基本上不要直接从流中解码到SKBitmap,而是首先加载到SKImage中,然后转换为Bitmap,然后它就可以工作了。¯_(ツ)_/¯ 仍然不知道为什么会发生这种情况,但我已经创建了这个问题并且它仍然处于开放状态:https://github.com/mono/SkiaSharp/issues/1621 - sowen
谢谢,我已经在 Github 上为你的问题点赞,并会尝试使用你的解决方案。 - Ivaylo
2
另一个“解决方案”是可能降级到2.80.2版本。 - Nick Kovalsky
1个回答

0

那是一个错误, 已在2.88.3中修复。更新到2.88.3以解决该问题:

dotnet add package SkiaSharp --version 2.88.3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接