使用C#中的LibTiff(访问平铺的TIFF图像)

我想使用LibTiff来访问非常大的TIFF文件。 我需要多个页面和图块等function,所以LibTiff似乎是正确的方法。 任何人都可以帮助我如何使用C#中的LibTiff? 我找到了一些链接(比如blog.bee-ee ,其中包含部分代码。但是我不能超越一个版本。我看过FreeImage但发现它不合适(图片大约800 MPixel 8或16)位灰度 – > 800-1600 MByte)大小,我无法在32位环境中将其加载到内存中)

我在C / C ++方面很有经验,但还没有在C#中。 任何人都可以帮我一个包装或一些提示吗?

注意:我需要页面来访问tiff中的金字塔平面(多分辨率),以及256×256的图块,以便快速访问图像的不同部分而无需立即加载它。

[编辑] LibTIFF.NET解决方案对我来说似乎最实用。 我现在正在将它集成到产品开发中,它可以让我从进出被管理内存中省去很多麻烦。 我还没有尝试过’回调’function,这似乎可以通过.net方式很好地解决。 感谢stackoverflow的帮助[/编辑]

你可以尝试我们的LibTiff.Net。 它是使用托管C#编写的LibTiff的免费开源版本。 我们实现的API与原始API非常相似。

http://sofzh.miximages.com/c%23/pprecodeif (LibTIFF.IsTiled(tiff)) { if (LibTIFF.GetField(tiff, (int)TIFFTags.TIFFTAG_TILEWIDTH, out tileWidth) && LibTIFF.GetField(tiff, (int)TIFFTags.TIFFTAG_TILELENGTH, out tileLength)) { uint tiles = 0; IntPtr pTile = LibTIFF._malloc((int)(tileLength*tileWidth*bitsPerSample/2)); for (uint y = 0; y < imageLength; y += tileLength) { for (uint x = 0; x < imageWidth; x += tileWidth) { LibTIFF.ReadTile(tiff, pTile, x, y, 0, 0); tiles++; } } LibTIFF._free(pTile); } }

我会去找LibTIFF的.NET端口,但是这个解决方案对于其他人来说可能是正确的,所以我把它放在StackOverflow上。