То, что у меня есть, - это большое количество кадров, которые нужно разместить вместе в большом изображении (например, в мозаике).Требуемые положения изображений известны.
Существует очень большое количество изображений, поэтому загрузка их всех в память в лучшем случае нецелесообразна.
Основываясь на некоторых других ответах, я смогпереопределите методы в RenderedImage (в частности, getData(rect)
), чтобы загрузить соответствующие данные и вернуть их.
Это прекрасно работает, однако средство записи изображений всегда вызывает getData
и запрашивает строки данных.Мне кажется, я должен иметь возможность изменить ImageWriterParam для вызова отдельных плиток, но когда я попробовал, функция записи по-прежнему вызывает одну строку из 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);
} catch (FileNotFoundException ex) {
}
Примечание. Я могу использовать param.setTilingMode(ImageWriteParam.MODE_EXPLICIT);
и setTiling(w,h,xoff,yoff);
Однако при использовании этого writer.write
по-прежнему вызывает getData(rect)
в моем изображении, иочень досадно не требует прямоугольник размера, указанного w,h
.Он вызывает прямоугольник размером, который отличается на какую-то случайную величину (возможно, от чего-то)
Например, если я использую setTiling(100,100,0,0);
, можно ожидать, что даже если он не вызываетgetTile из изображения, Rectangle, переданный getData, должен быть (0,0,100,100), но вместо этого он передает Rectangle (0,0,96,96), который не кратен ширине изображения или чему-либо еще, о чем я могу думать.
Спасибо за любую помощь