Как найти количество страниц в многостраничном tiff-файле, когда страницы сохранены в полосках

Я хочу прочитать многостраничный файл TIFF с библиотекой libtiff. Поместите его в одномерный массив и проведите с ним обработку. Файл TIFF сохраняется в виде полос по 6 строк, каждая из которых имеет 600 пикселей, каждая из которых определяется значением 2 байта (uint16). На каждой странице, например, 100 строк, и скажем, у нас есть 3 страницы. Это были числа для одного примера.

Чтобы иметь возможность сгенерировать 1D-массив, я думаю, мне нужно выделить память для изображения, чтобы поместить значения в эту память, однако я не знаю размеры изображений TIFF и поэтому с: TIFFGetField(tif1, TIFFTAG_IMAGEWIDTH, &width), я могу найти ширину одно изображение и с: TIFFGetField(tif1, TIFFTAG_IMAGELENGTH, &height), я могу найти высоту изображения.

Но как мне заранее узнать количество страниц, чтобы выделить нужный объем памяти?


person user3163299    schedule 17.03.2014    source источник
comment
Полоски вертикальные или горизонтальные? Имеется ли в формате одна полоса для всех страниц, затем возвращается 2 строки для всех страниц?   -  person Thomas Matthews    schedule 18.03.2014
comment
Спасибо за ваш ответ. Я новичок в использовании libtiff и не знаю, как в этом убедиться. Однако я использовал эти команды stripSize = TIFFStripSize (tif); и numstrips = TIFFNumberOfStrips (tif). Таким образом, он имеет stipsize = 7200 - ›(6 строк по 1200 байт (600 пикселей)) и numstrips = 17 Из этих значений кажется, что данные, сохраненные и прочитанные в первом каталоге, равны количеству данных, которое я ожидаю для одной страницы. . Так что я думаю, что страницы сохраняются одна за другой.   -  person user3163299    schedule 19.03.2014


Ответы (1)


Что касается спецификации TIFF, у вас есть изображение в каждом каталоге TIFF.

Используя int TIFFReadDirectory(TIFF* tif), вы переходите к следующему каталогу TIFF, а затем можете прочитать следующее изображение.

Следовательно, вы можете выделять объем памяти, необходимый для каждого изображения, каждый раз, когда вы его читаете.

Следующий код позволяет вам перебирать все каталоги вашего файла TIFF:

#include "tiffio.h"
main(int argc, char* argv[])
{
    TIFF* tif = TIFFOpen(argv[1], "r");
    if (tif) {
    int dircount = 0;
    do {
        dircount++;
    } while (TIFFReadDirectory(tif));
    printf("%d directories in %s\n", dircount, argv[1]);
    TIFFClose(tif);
    }
    exit(0);
}

В цикле do-while вы можете добавить чтение своего изображения.

person dkg    schedule 14.12.2015