Как узнать количество страниц в многостраничном TIFF-файле, когда страницы сохраняются в виде полос?

0

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

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

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

  • 0
    Полосы вертикальные или горизонтальные? Формат имеет одну полосу для всех страниц, затем возвращается и имеет 2 строки для всех страниц?
  • 0
    Спасибо за ваш ответ. Я довольно плохо знаком с использованием libtiff и не знаю, как в этом убедиться. Однако я использовал эти команды stripSize = TIFFStripSize (tif); и numstrips = TIFFNumberOfStrips (tif). Таким образом, у него есть stipsize = 7200 -> (6 строк по 1200 байт (600 пикселей)) и numstrips = 17 Из этих значений кажется, что данные, сохраненные и прочитанные в первом каталоге, равны объему данных, который я ожидаю на одной странице , Поэтому я думаю, что страницы сохраняются одна за другой.
Теги:
tiff
libtiff

1 ответ

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 while вы можете добавить свое изображение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню