c++ - 当页面以 strip 形式保存时,如何查找多页 tiff 文件中的页数

标签 c++ c tiff libtiff

我想用 libtiff 库读取多页 TIFF 文件。将其放入一维数组中并对其进行处理。 TIFF 文件以 6 行的 strip 形式保存,其中每行有 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/

相关文章:

c - 如果输入长度不同,如何计算函数 strcmp() 中的比较?

xamarin.ios - Tiff 相当于 UIImage.AsPNG()

C++ 使用传递函数

c++ - QT Creator "This does not seem to be a Debug build."调试

C - 左移或添加到自身(速度)

c - const-casting 是通过 union 未定义的行为吗?

带有 CMYK + Alpha 的 WPF BitmapImage 和 TIFF

wpf - 我需要在 WPF 应用程序中查看多页 TIFF

c++ - 将 C++ 字节数组转换为 C 字符串

c++ - Qt Creator - Project ERROR : Xcode not set up properly. 您可能需要通过运行/usr/bin/xcodebuild 来确认许可协议(protocol)