我有一个简单的问题。我处理的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磁贴被加载到内存中!

关于c++ - 是否可以通过每次仅在内存中保存一个图块来处理全图块的tiff图像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52720696/

10-12 23:09