LIBTiff.net нулевой размер строки сканирования

#c# #libtiff.net

#c# #libtiff.net

Вопрос:

Я читаю конкретный файл TIF, который сообщает о нулевом размере строки сканирования. Операция чтения возвращает значение null.

 tiff = Tiff.ClientOpen("image", Stream.Length == 0 ? "w" : "ra", Stream, new TIFFTruncStream());
  

tiff == null , и журнал содержит Zero scanline size сообщение о трассировке.

Платформа .NET Framework и некоторые другие средства просмотра не могут открыть файл, нам удалось открыть файл (ы) в некоторых старых средствах просмотра IBM. Это определенно поврежденный файл или просто сценарий, не поддерживаемый LibTiff.NET ?

Спасибо

Комментарии:

1. Скорее всего, это поврежденный файл. Но: есть ли какой-либо современный просмотрщик, доступный онлайн, который может открыть файл?

2. Ничего из того, что я пробовал. Что мне действительно нужно знать, так это что означает нулевая строка сканирования, и является ли это обычно признаком поврежденного файла.

3. Нулевой размер строки сканирования определенно не поддерживается libtiff / LibTiff.Net. Это может быть поврежденный файл (некоторые каталоги, иначе страницы, повреждены) или может быть ошибка в коде, который считывает / вычисляет размер строки сканирования. Учитывая, что вы можете открыть этот файл по крайней мере в одном средстве просмотра, я думаю, что библиотеку можно адаптировать для чтения таких файлов. Вы можете отправить свой файл (с любыми дополнительными скриншотами и т.д.) по адресу support@bitmiracle.com для дальнейшего рассмотрения. Без файла я больше ничего не могу сделать, извините.

4. @Babrovsky, разве ты не хочешь ответить на этот вопрос ответом, указывающим, что нулевая строка сканирования является поврежденным изображением. Я отправил образцы изображений, и вы, ребята, подтвердили, что они «повреждены».

5. Конечно, просто я не мог найти эти вопросы до сегодняшнего дня 🙂

Ответ №1:

Нулевой размер строки сканирования определенно не поддерживается libtiff / LibTiff.Net. Я не знаю ни о каком другом средстве просмотра, которое поддерживает изображения со строками развертки нулевой длины.

Джим отправил нам пару таких файлов, и оказалось, что файлы повреждены. Они указывают нулевую ширину для своей первой страницы.

Я пытался открыть эти файлы в некоторых других программах просмотра изображений, но открыть их смогла только утилита предварительного просмотра в Mac OS X Mavericks. Утилита открывает оба файла, но молча пропускает первую поврежденную страницу. Он не показывает ошибок и действует так, как будто в файлах на одну страницу меньше.

Чтобы добиться того же (молча пропустить первую страницу), вы можете использовать следующий обходной путь:

  1. Откройте TIFF в режиме добавления
  2. Установите текущую страницу в качестве первой страницы
  3. В цикле проверьте размер каждой страницы
  4. Пропускайте любую страницу с нулевой шириной или высотой

Ниже приведен пример кода для решения проблемы.

 // "a" is for append
using (Tiff inImage = Tiff.Open(put-file-name-here, "a"))
{
    if (inImage == null)
        return;

    // move to the first page
    inImage.SetDirectory(0);

    do
    {
        FieldValue[] width = inImage.GetField(TiffTag.IMAGEWIDTH);
        FieldValue[] height = inImage.GetField(TiffTag.IMAGEWIDTH);
        if (width[0].ToInt() != 0 amp;amp; height[0].ToInt() != 0)
        {
            // the page appears correct, do something with it
        }
    } while (inImage.ReadDirectory());
}