除非我使用Image.FromFile,否则Image.SelectActiveFrame为何在多页TIFF的最后一帧上失败(“ GDI +中发生一般错误”)?

问题描述 投票:1回答:1
Related SO Answer(这是为什么??]

我正在调用Web服务(我无权访问其源代码),该服务正在返回给我一个字节数组,该字节数组应该表示多页TIFF图像。 (方法名称已更改以保留就业机会...)

var tiffBytes = _webServiceClient.GetTiff("someIdentifier");

如果我使用标准FileStream将tiffBytes写入文件,然后在知道TIFF是什么的情况下打开生成的文件,那没有问题,我可以正确浏览页面。当直接从该文件(Image.FromFile(...))创建Image对象时,其余代码也没有问题。这使我相信tiffBytes中存储的字节实际上是有效的。

如果我将tiffBytes写到MemoryStream,事情会变得很奇怪:

//Note that this code works just fine if I create "img" with Image.FromFile() var frameCount = img.GetFrameCount(FrameDimension.Page); // frameCount = 2 img.SelectActiveFrame(FrameDimension.Page, 0); // First frame selected with no issue img.SelectActiveFrame(FrameDimension.Page, 1); // Exception: "A generic error occured in GDI+"

我认为我创建的MemoryStream不正确,但是我确实不认为自己是。我尝试了几种不同的方法来获得相同的结果。生成的Image对象将显示并正常运行,直到我尝试移至最后一页:

方法1:

using(var ms = new MemoryStream(tiffBytes)) { img = Image.FromStream(ms); }

方法2:

using(var ms = new MemoryStream(tiffBytes.Length)) { ms.Write(tiffBytes, 0, tiffBytes.Length); img = Image.FromStream(ms); }

所以...我的问题是,为什么Image.FromFile()和Image.FromStream()之间的差异会使TIFF的最后一页/帧在加载时导致异常?

侧问题...是否可以访问某种win32 api来查看该异常到底是什么?

相关SO答案(这是为什么??),我正在调用一个Web服务(我无权访问其源代码),该Web服务正在向我返回一个字节数组,该字节数组应该表示多页TIFF图像。 (...

.net gdi+ tiff
1个回答
0
投票
Hans Passant的评论很有用,但我没有找到完整的解决方案。
© www.soinside.com 2019 - 2024. All rights reserved.