当页面以条带形式保存时,如何查找多页tiff文件中的页数

时间:2014-03-17 23:05:29

标签: c++ c tiff libtiff

我想用libtiff库读取多页TIFF文件。将它放入一维数组并对其进行处理。 TIFF文件以6行的条带保存,每行包含600个像素,每个像素定义一个2字节(uint16)值。例如,在每个页面中有100行,并且假设我们有3页。 这些是一个例子的数字。

为了能够生成一维数组,我想我需要为图像分配内存以将值放在该内存中,但我不知道TIFF图像的尺寸,因此使用:TIFFGetField(tif1, TIFFTAG_IMAGEWIDTH, &width) ,我可以找到一个图像的宽度,并使用:TIFFGetField(tif1, TIFFTAG_IMAGELENGTH, &height),我可以找到图像的高度。

但是我应该如何找到预先分配适量内存的页数?

1 个答案:

答案 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循环中,您可以添加图片阅读。