首页 文章

以TIFF格式保存一叠图像

提问于
浏览
2

我试图以TIFF格式保存相同图像的堆栈但是当我用ImageJ这样的应用程序打开图像时,我只能查看第一个图像;第二张和第三张图像无法显示 . 我相信TIFF图像包含第二和第三图像的图像数据,因为尺寸是单个tiff图像的3倍 .

我使用了以下代码,但没有运气 .

int NPAGES = 3;
for (int page = 0; page < NPAGES; page++) {
    TIFFSetField(out, TIFFTAG_IMAGEWIDTH, frame->Width);
    TIFFSetField(out, TIFFTAG_IMAGELENGTH, frame->Height);
    TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1);
    TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 16);
    TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);

    TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
    TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
    TIFFSetField(out, TIFFTAG_MAXSAMPLEVALUE, (1 << frame->BitDepth) - 1);

    /// added 
    TIFFSetField(out, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE);
    TIFFSetField(out, TIFFTAG_PAGENUMBER, page, NPAGES);
    TIFFWriteRawStrip(out, 0, (void*)image, frame->RawImageData->Length * 2);
}

有人可以帮帮我吗 ?

1 回答

  • 1

    函数TIFFWriteDirectory关闭目录(页面)并启动一个新目录 . 在循环结束时调用此函数,因此每次迭代都以一个新目录开始 . 您无需显式设置页码 .

    for (int page = 0; page < NPAGES; page++) {
        TIFFSetField(out, TIFFTAG_IMAGEWIDTH, frame->Width);
        TIFFSetField(out, TIFFTAG_IMAGELENGTH, frame->Height);
        //...
        TIFFWriteDirectory(out);
    }
    

相关问题