Я хотел бы использовать LibTiff для доступа к очень большим файлам TIFF. Мне нужны функции как несколько страниц и мозаик, и таким образом, LibTiff, кажется, правильный способ пойти. Кто-либо может помочь мне о том, как использовать LibTiff от C#? Я нашел некоторые ссылки (как blog.bee-ee, который содержал частичный код. Но я couln't добираюсь вне получения версии. Я посмотрел на FreeImage, но нашел его не подходящим (изображения являются приблизительно 800 шкалами полутонов на 8 или 16 битов MPixel-> 800-1600 мегабайтов), размер, и я не могу загрузить его в памяти в 32-разрядной среде),
Я очень опытен в C/C++, но еще в C#. Кто-либо может помочь мне к обертке или некоторым подсказкам?
Примечание: Мне нужны страницы к доступу pyramidical плоскости (мультиразрешение) в tiff и мозаики 256x256, чтобы иметь быстрый доступ к различным частям изображения, не загружая его сразу.
[Редактирование] решение LibTIFF.NET казалось самым практичным для меня. Я теперь интегрирую его в разработке продукта, и это propably сохранит меня много головных болей от движения в/из управляемой памяти. Я еще не попробовал функциональность 'обратного вызова', которая, кажется, решена приятно в .NET путь. Спасибо за справку на stackoverflow [/Редактирование]
Вы можете попробовать наш LibTiff.Net. Это бесплатная версия LibTiff с открытым исходным кодом, написанная на управляемом C#. API нашей реализации осталось очень похожим на оригинальное.
http://bitmiracle.com/libtiff/
Мы только что выпустили его, так что могут быть ошибки. Но полный исходный код поставляется с рядом тестов, поэтому наиболее очевидные ошибки должны быть исправлены.
WIC обеспечивает поддержку очень больших файлов изображений. Для него есть хорошая обертка в .NET Framework: TiffTmapdecoder.
Мое начальное решение было использование обертки C # .NET для DLL Libtiff DLL. Я нашел его на Libtiff FTP . Кажется, он содержит все важные методы библиотеки Ливифффы. Он сохраняет память в неуправляемой памяти Libtiff; Это означает, что код C # должен знать об этом и копировать данные, когда она должна быть обработана в безопасном коде.
Моя «код чтения плитки», чтобы проверить его, как
if (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);
}
}
, я пойду на порт .NET of Libtiff, но это решение может быть подходящим для других людей, поэтому я оставляю его на стойке.