Используя LibTiff от C# (для доступа к размещенным рядом изображениям в формате TIFF)

Я хотел бы использовать 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 [/Редактирование]

10
задан Bobrovsky 30 January 2012 в 08:40
поделиться

3 ответа

Вы можете попробовать наш LibTiff.Net. Это бесплатная версия LibTiff с открытым исходным кодом, написанная на управляемом C#. API нашей реализации осталось очень похожим на оригинальное.

http://bitmiracle.com/libtiff/

Мы только что выпустили его, так что могут быть ошибки. Но полный исходный код поставляется с рядом тестов, поэтому наиболее очевидные ошибки должны быть исправлены.

7
ответ дан 4 December 2019 в 00:24
поделиться

WIC обеспечивает поддержку очень больших файлов изображений. Для него есть хорошая обертка в .NET Framework: TiffTmapdecoder.

4
ответ дан 4 December 2019 в 00:24
поделиться

Мое начальное решение было использование обертки 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, но это решение может быть подходящим для других людей, поэтому я оставляю его на стойке.

1
ответ дан 4 December 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: