我所拥有的是大量帧,它们需要以较大的图像放置在一起(例如马赛克).图像的所需位置是已知的.
图像数量很多,因此充其量将其充入内存是不切实际的.
根据这里的其他答案,我能够重写RenderedImage中的方法(特别是getData(rect))以加载适当的数据并返回它.
这工作得很好,但是图像编写器总是调用getData并请求数据行.在我看来,我应该能够更改ImageWriterParam来调用单个图块,但是当我尝试执行write函数时,仍然需要从getData中调用一行.
我怎样才能强制使用磁贴并调用getTile呢?
BufferedOutputStream bos=null;
try {
bos = new BufferedOutputStream(new FileOutputStream(new File("test2.tiff")));
ImageWriter writer =(ImageWriter) ImageIO.getImageWritersBySuffix("tif").next();
ImageOutputStream ios=null
ios = ImageIO.createImageOutputStream(bos);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setTilingMode(ImageWriteParam.MODE_DEFAULT);
RenderedImage mosaic = new MosaicImage(imageFiles[]);
writer.write(null,new IIOImage(mosaic,null,null),param);<