我有一个 14406x9606 像素的 8 位 tiff,当通过 BitmapImage 加载时会引发 System.OutOfMemoryException。作为全深度位图,其大小约为 400 兆。有没有办法将图像分割成更易于管理的块?我尝试使用 DecodePixelHeight 以较低的分辨率加载它,这很有效,但是每当缩放级别发生变化时我都需要重新加载。是否有任何已建立的工具可以在 WPF 中以不同的缩放级别处理非常大的图像?
问问题
2036 次
2 回答
1
没有任何内置的东西可以直接处理这个问题。 DecodePixelHeight
,正如您所提到的,可能是框架本身的最佳选择。
但是,您可以使用GDAL 的 C# 包装器之类的东西。GDAL 处理非常大的 TIFF 文件,包括带有金字塔的文件,并允许您(非常快速地)以不同的分辨率打开 TIFF,而无需将整个文件加载到内存中。这仍然需要在分辨率更改时刷新/重新加载,但它们的 TIFF 加载速度比框架的图像类快得多,因为它旨在处理超大图像。
于 2011-02-25T20:47:25.353 回答
1
您可能想尝试LibTiff.Net库。它是用纯 C# 代码编写的,免费、开源(商业友好的 BSD 许可证)。
LibTiff.Net 可以处理最大 4 GB 的 TIFF 文件,并且可用于打开文件而无需解码所有样本。该库还支持多条和平铺的 TIFF 文件。
免责声明:我是图书馆的维护者之一。
于 2011-02-26T08:10:01.330 回答