2011-03-10 58 views
1

我需要将一些tiff文件读取到WPF中,并且所有工作都很好,直到我在Windows XP上测试它为止。无论我如何加载,加载的图像似乎都已损坏。.NET处理tiff文件在XP上损坏,但不是Win7

附加是同一个程序加载相同图像的2个屏幕截图 - 黑暗的是它应该看起来如何(从Win7加载),另一个是它在XP中加载时的样子。

我已经尝试加载为BitmapImage,BitmapSource,加载FileStream并直接从WPF中的Image标记传递给BitmapImage ...都具有相同的损坏类型。我已经使用.NET LibTiff库来解决这个问题,但它并不能解释为什么会发生这种情况,而且我有点难以解释它!

编辑:我应该补充说,图像是16位。

Loaded in Windows 7 Loaded in XP

+0

对于卫星传输的原始图像而言,这是非常典型的。检查机器的接线。期待我们诊断来自卫星图像的编码错误不会给你一个很好的答案。发布代码和图像文件的链接。 – 2011-03-10 14:59:45

+0

上面的图片都是从tiff加载的 - 没有涉及外部设备 - 它是同一个文件。唯一的区别是较低的一个是在XP中加载的图像的屏幕截图,顶部是Windows 7的屏幕截图 - 两者都使用相同的程序。我用各种方法加载它,并且它们都产生了这个错误。 – zotty 2011-03-11 13:00:11

+0

TIFF是臭名昭着的。这是一个非常不受支持的格式。 – 2011-03-11 14:00:29

回答

1

Windows对于TIFF格式的支持在XP中非常差,在Windows 7中得到了极大的增强。XP不支持16位(即它仅使用8位) 请看看http://msdn.microsoft.com/en-us/library/ee720061%28VS.85%29.aspx请参阅Windows 7中的改进内容。您还可以将其视为W7中修复的错误和限制列表,并在Windows XP中提供。

使用LibTiff(或LibTiff.NET)时,不要使用Windows映像类,而要显示结果位图。 我做了一些范围映射(16-> 8位)我的自我,使用AForge.NET可视化。我通过实现将我的tiff文件(16位)转换为8位BMP的函数来实现这一功能,包括图像渲染(即调平)

1

您是否尝试过使用类似LibTiff外部库?

+0

我有 - LibTiff完美的工作,但我很好奇,为什么每个程序使用相同的程序之间有差异。我认为.NET的重点是,只要你安装了框架,你就可以运行任何程序。 – zotty 2011-03-14 11:02:47

+0

我同意它“应该”以这种方式工作,但我也知道.Net的tiff处理有很多不足之处。我也不知道为什么它在不同的机器上表现不一样。太糟糕了,我们无法以简单的方式调试内部。 – 2011-03-14 12:37:26

+0

@ zotty:这是因为.NET Framework依赖于某些“平台组件”,这些平台组件是与Windows的特定版本/版本绑定的服务。 Windows映像组件是平台组件的一个示例。因此,即使是。.NET Framework代码是相同的,平台组件在不同的操作系统版本/版本(XP vs Vista vs Win 7)上的表现有所不同。 – rwong 2011-04-02 19:22:53