是否可以通过每次在内存中仅保存一个平铺来处理完整的平铺 tiff 图像?

Is it possible to process a full tiled tiff image by saving only one tile in memory every time?

本文关键字:处理 一个 图像 tiff 可以通过 内存 保存 是否      更新时间:2023-10-16

我遇到了一个简单的问题。我处理巨大的 tiff 图像(>4GB(,当将它们全部加载到内存中时,我填满了我的 RAM,程序被杀死了。我试图将它们保存为平铺的 tiff,然后使用 libtiff 像这样逐块加载它们:

tdata_t buf = _TIFFmalloc(TIFFTileSize(tifSrc));
for(int i = 0;i< 20000;i+=128){
for(int j = 0;j< 20000;j+=128)
{
TIFFReadTile(tifSrc, buf , i, j, 0,0);
TIFFWriteTile(tifDst, (tdata_t)buf , i, j,0, 0);
}
}
_TIFFfree(buf);

但是,尽管我希望上面的代码每次迭代(128x128字节(仅在内存中加载一个图块,但整个图像被存储起来...... 有谁知道如何在内存中只加载一个图块?

要回答我自己的问题,您必须首先分配标签TIFFTAG_TILEWIDTH并像这样TIFFTAG_TILELENGTH:

TIFFSetField(tiff, TIFFTAG_TILEWIDTH, (uint32)128);
TIFFSetField(tiff, TIFFTAG_TILELENGTH, (uint32)128);

然后读取和写入函数通过返回"0"成功,并且只有 128x128 的图块加载到内存中!