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

标签 c++ c out-of-memory tiff libtiff

我有一个简单的问题。我处理巨大的 tiff 图像(>4GB),当将它们全部加载到内存中时,我会填满 RAM,程序就会被终止。我尝试将它们保存为平铺 tiff,然后使用 libtiff 逐 block 加载它们,如下所示:

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);

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

最佳答案

要回答我自己的问题,您必须首先指定标签 TIFFTAG_TILEWIDTH 和 TIFFTAG_TILELENGTH,如下所示:

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

然后读写函数成功并返回“0”,并且只有 128x128 的图 block 被加载到内存中!

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

相关文章:

c# - MemoryFailPoint 始终抛出 InsufficientMemoryException,即使内存可用也是如此

c++ - 如何将数字乘数分配给 or-tools (C++) 中的变量

android - 如何在不降低分辨率的情况下避免位图上的内存不足错误

c++ - do...while 语句满足后向控制台输出一个值?

C程序自动四舍五入

android - sadio register_driver() 会创 build 备名称吗?

python - *** 错误 `python' : munmap_chunk(): invalid pointer: 0x00007fdfb8c28950 ***

java - 我的程序出现内存不足错误

c++ - 指向单例的共享指针不能相互识别

c++ - 如何在 SQLite 中传递用于触发函数的变量?