我想使用libtiff库读取多页TIFF文件。将其放入一维数组并对其进行处理。 TIFF文件保存为6行,每行有600个像素,每个像素定义为2字节(uint16)值。例如,每页有100行,可以说我们有3页。
这些是一个例子的数字。

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

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

最佳答案

关于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循环中,您可以添加图像读取。

关于c++ - 将页面保存在 strip 中时如何在多页tiff文件中查找页数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22467236/

10-12 20:41