#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. Утилита открывает оба файла, но молча пропускает первую поврежденную страницу. Он не показывает ошибок и действует так, как будто в файлах на одну страницу меньше.
Чтобы добиться того же (молча пропустить первую страницу), вы можете использовать следующий обходной путь:
- Откройте TIFF в режиме добавления
- Установите текущую страницу в качестве первой страницы
- В цикле проверьте размер каждой страницы
- Пропускайте любую страницу с нулевой шириной или высотой
Ниже приведен пример кода для решения проблемы.
// "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());
}