我有一个大的摆动组件要写入 TIFF。该组件太大而无法将 TIFF 加载到内存中,因此我要么需要制作一个由基于磁盘的 WritableRaster 支持的大 BufferedImage(如此处所述),要么使用 JAI。
除了项目的完全混乱之外,JAI 似乎是更好的答案。
鉴于此,有人可以概述将我的挥杆组件写入平铺 TIFF 而不会耗尽内存的步骤吗?
图像尺寸可能为 10000x700
理想情况下,我会创建某种基于磁盘的映像,并将部分组件写入其中,每次写入都会刷新到磁盘。
编辑
我想我可以用 ImageWriter 做到这一点,但是当我打电话时我得到了 NoSuchElementException:
ImageWriter imageWriter = ImageIO.getImageWritersByFormatName("tif").next();
我的类路径上有 jai_code.jar 和 jai_core.jar jar,我还需要做些什么吗?
编辑 我可以使用 JAI 创建一个非常大的 TIFF,但 JAI 不支持 TIFF 压缩,因此文件为 92 MB。
如果我安装 JAI-ImageIO,我可以使用 ImageWriter 创建一个压缩的 TIFF,但只能从我没有足够内存的 Raster 或 BufferedImage 创建。
有没有办法做一个两步的方法,使用 JAI 创建大 TIFF,然后压缩大 TIFF 而不将整个东西加载到内存中?