是否可以通过每次在内存中仅保存一个平铺来处理完整的平铺 tiff 图像?
Is it possible to process a full tiled tiff image by saving only one tile in memory every time?
我遇到了一个简单的问题。我处理巨大的 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 的图块加载到内存中!
相关文章:
- 在多个核心中处理一个HTTP请求
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 有没有办法在使用 GLFW 按下按键后只处理一个输入事件?
- 专门处理一个参数(C++模板)的两个模板参数
- 处理一个大图像文本文件
- 用于多态处理一个元素的关联容器
- 预处理一个自定义文本文件,以使用Boost Spirit删除注释
- 我正在处理一个 c++ 项目,但在通过引用传递 rect0 对象时遇到问题
- WinAPI 创建窗口 + 子窗口,处理一个按钮按下
- 处理一个套接字和多个线程时异步 IO 的用例
- 让多个QGraphicsItem处理一个鼠标事件
- 我可以处理一个isstrstream来获得对底层I /o缓冲区的随机搜索吗?
- 处理一个12位数的因数需要多长时间?
- 在像LMAX破坏者这样的模式中,你如何处理一个缓慢的消费者
- 帮助处理一个非常奇怪的COM+调用栈
- C++到C#端口的问题:如何处理一个以double*为参数的方法
- 如何在需要时优先处理一个线程
- 如何处理一个方法的多个实现
- 这是更快和更有效的,处理一个字符一个字符作为字符或流
- 拿出std_vector.我只处理一个文件,不能同时处理两个文件