我想用libtiff库读取多页TIFF文件。将它放入一维数组并对其进行处理。 TIFF文件以6行的条带保存,每行包含600个像素,每个像素定义一个2字节(uint16)值。例如,在每个页面中有100行,并且假设我们有3页。 这些是一个例子的数字。
为了能够生成一维数组,我想我需要为图像分配内存以将值放在该内存中,但我不知道TIFF图像的尺寸,因此使用:TIFFGetField(tif1, TIFFTAG_IMAGEWIDTH, &width)
,我可以找到一个图像的宽度,并使用:TIFFGetField(tif1, TIFFTAG_IMAGELENGTH, &height)
,我可以找到图像的高度。
但是我应该如何找到预先分配适量内存的页数?
答案 0 :(得分:1)
关于TIFF specification,每个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
循环中,您可以添加图片阅读。