C#通用GDI +使用Image.Save()时出错

我是一个相对新手在C#中的成像。 这是我在成为会员很长一段时间后在这个委员会的第一个问题。 我希望它能帮助我解决这个棘手的情况。

我需要阅读一个Multi Page TIFF的内容(框架),将每一个内容保存到一个List中,最后返回,然后做一些工作。

inheritance人我的代码到目前为止

public static List<Image> GetAllPages(string file) { images = new List<Image>(); using (Image img = Image.FromFile(file)) { try { for (int i = 0; i < img.GetFrameCount(FrameDimension.Page); i++) { img.SelectActiveFrame(FrameDimension.Page, i); MemoryStream byteStream = new MemoryStream(); img.Save(byteStream, ImageFormat.Tiff); images.Add(Image.FromStream(byteStream)); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } return images; } 

重要的 – 这实际上是一个魅力,当在Windows 7上执行。但是,当在Windows XP上尝试相同的时候,我得到了似乎广为人知的通用GDI +错误。

有什么明显的我在这里失踪? 如果没有,是否有其他更有效的方法来返回从多页TIFF中提取的图像列表?

我将不胜感激任何人可以给的帮助。

Hans Passant在评论中有两个有用的信息。 首先,TIFF格式支持无数的子类型和变体,而不是所有这些都由GDI +支持。 其次,GDI +在XP之后有所改善,但并不是无处不在。

您的代码在Windows XP和Windows 7上都能正常工作,但只能使用正确的输入TIFF文件。

我使用.NET 2.0和.NET 4.0程序对2个输入文件进行了测试。 第一个文件有6页,所有这些都是用LZW压缩编码的。 这个文件同时适用于Windows 7和XP。

第二个文件有11个页面,有11种不同类型的编码。 在Windows XP上,只有11页中的7页正确加载。 在Windows 7上,甚至更少的页面工作,但特别是JPEG压缩工作正常,虽然它在XP下失败。

Windows 8.1比两者都好,并设法正确加载8页。

您可以找到这些文件以及此页面上使用的压缩类型列表: http : //support.leadtools.com/CS/forums/44475/ShowPost.aspx

当然,还有其他的TIFF子类型,其中大部分本身不支持GDI +,但是这十一种是更常见的格式。

这给我们留下了让你的文件在Windows XP上工作的问题。 由于他们在Windows 7上工作,很有可能你有一个TIF子类型,可以在Windows 7上运行,但不能在XP上运行,如JPEG压缩。 如果是这样的话,仅用.NET是不够的,你可能不得不使用专用的图像或TIFF库来加载这些文件。