Class RecyclingTileFactory

  • All Implemented Interfaces:
    Observer, TileFactory, TileRecycler

    public class RecyclingTileFactory
    extends Observable
    implements TileFactory, TileRecycler, Observer
    A simple implementation of TileFactory wherein the tiles returned from createTile() attempt to re-use primitive arrays provided by the TileRecycler method recycleTile().

    A simple example of the use of this class is as follows wherein image files are read, each image is filtered, and each output written to a file:

     String[] sourceFiles; // source file paths
     KernelJAI kernel; // filtering kernel
    
     // Create a RenderingHints object and set hints.
     RenderingHints rh = new RenderingHints(null);
     RecyclingTileFactory rtf = new RecyclingTileFactory();
     rh.put(JAI.KEY_TILE_RECYCLER, rtf);
     rh.put(JAI.KEY_TILE_FACTORY, rtf);
     rh.put(JAI.KEY_IMAGE_LAYOUT, new ImageLayout().setTileWidth(32).setTileHeight(
                    32));
    
     int counter = 0;
    
     // Read each image, filter it, and save the output to a file.
     for (int i = 0; i < sourceFiles.length; i++) {
            PlanarImage source = JAI.create("fileload", sourceFiles[i]);
            ParameterBlock pb = (new ParameterBlock()).addSource(source).add(kernel);
    
            // The TileFactory hint will cause tiles to be created by 'rtf'.
            RenderedOp dest = JAI.create("convolve", pb, rh);
            String fileName = "image_" + (++counter) + ".tif";
            JAI.create("filestore", dest, fileName);
    
            // The TileRecycler hint will cause arrays to be reused by 'rtf'.
            dest.dispose();
     }
     
    In the above code, if the SampleModel of all source images is identical, then data arrays should only be created in the first iteration.
    Since:
    JAI 1.1.2
    • Constructor Detail

      • RecyclingTileFactory

        public RecyclingTileFactory​(Observable tileCache)
        Constructs a RecyclingTileFactory.
    • Method Detail

      • canReclaimMemory

        public boolean canReclaimMemory()
        Returns true.
        Specified by:
        canReclaimMemory in interface TileFactory
      • isMemoryCache

        public boolean isMemoryCache()
        Returns true.
        Specified by:
        isMemoryCache in interface TileFactory
      • getMemoryUsed

        public long getMemoryUsed()
        Specified by:
        getMemoryUsed in interface TileFactory
      • flush

        public void flush()
        Specified by:
        flush in interface TileFactory
      • recycleTile

        public void recycleTile​(Raster tile)
        Recycle the given tile.
        Specified by:
        recycleTile in interface TileRecycler