1

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

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

但是我应该如何找到提前分配适量内存的页数呢?

4

1 回答 1

2

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

于 2015-12-14T09:13:49.957 回答