Я хочу прочитать многостраничный файл TIFF с библиотекой libtiff. Поместите его в одномерный массив и выполните обработку на нем. Файл TIFF сохраняется в виде полос по 6 строк, где каждая строка имеет 600 пикселей, каждая из которых имеет значение 2 байта (uint16). На каждой странице, например, 100 строк, и скажем, у нас есть 3 страницы.
Это были цифры для одного примера.
Чтобы иметь возможность генерировать одномерный массив, я думаю, что мне нужно выделить память для изображения, чтобы поместить значения в эту память, однако я не знаю размеров изображений TIFF и так с: TIFFGetField(tif1, TIFFTAG_IMAGEWIDTH, &width)
Я могу найти ширину одного изображения и с помощью: TIFFGetField(tif1, TIFFTAG_IMAGELENGTH, &height)
Я могу найти высоту изображения.
Но как мне найти количество страниц, чтобы заранее выделить нужное количество памяти?
Учитывая Спецификация 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
Цикл вы можете добавить изображение для чтения.
Других решений пока нет …