无法使用Mono创建/修改gif

14

我正在尝试为 .Net ImageProcessor 库添加单元测试:https://github.com/cosmo0/ImageProcessor/tree/tests

我在我的 Mac 上使用 Xamarin/Mono。Mono 似乎有一些问题与动画 gif 图像兼容。
对于我的单元测试,我有一堆测试图像,我加载它们并对每个图像运行变换。每次我应用一个滤镜(例如亮度),当尝试重新创建图像时,它就失败了。

失败的代码在这里:https://github.com/cosmo0/ImageProcessor/blob/tests/src/ImageProcessor/Imaging/Formats/GifFormat.cs#L95

这只是一个简单的 Image.FromStream(stream);。我猜测流是有问题的;我尝试将其保存到文件中,实际上查看器无法读取该文件。奇怪的是,在 Windows 上,它似乎完全通过了测试:https://ci.appveyor.com/project/cosmo0/imageprocessor

有什么办法可以检查流或修复它吗?

谢谢!


1
只是一个数据点:TestApplyEffectBrightnessformat-Penguins.gif 上在Linux上似乎运行良好。 - Jester
2
嘿@jester,我是该库的作者。感谢您进行测试。为了澄清,问题出在动画GIF上。如果您有测试/调试的手段,那将非常棒。我只有一个Windows电脑,所以我无法进行调试,因为我无法让Xamarin与Mono配合使用。 - James South
使用 format-animated.gif 我在 OctreeQuantizer.cs 的第534行 处得到了异常,但那似乎是一个不同的问题。 - Jester
嗯...这让人有点担心。我希望它能像在Windows上一样顺利运行! - James South
1
抛出新的参数异常("没想到会出现这种情况!"); 哈哈!并不是最好的异常信息。 - David Crowell
如果它在一个平台上可以工作而在另一个平台上不行,那么这要么是一个错误,要么是一个未记录的缺失功能。请将其作为错误提交给 Xamarin。 - James
1个回答

1
尝试在调用之前重置流。

Image.FromStream(stream)

像这样:

如下:

stream.Seek(0, SeekOrigin.Begin);


3
已经有一个 stream.Position = 0;,这不是一样的吗? - thomasb
1
你不需要刷新吗?认真问一下。 - Novaterata

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