package ini.trakem2.imaging; import ij.VirtualStack; import ij.process.ImageProcessor; import ini.trakem2.utils.IJError; import ini.trakem2.utils.Utils; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; public class LazyVirtualStack extends VirtualStack { private final List<Callable<ImageProcessor>> tasks = new ArrayList<Callable<ImageProcessor>>(); private int initial_size; public LazyVirtualStack(final int width, final int height, final int initial_size) { super(); Utils.setField(this, ij.ImageStack.class, "width", width); Utils.setField(this, ij.ImageStack.class, "height", width); } public void addSlice(String name) { throw new UnsupportedOperationException("LazyVirtualStack accepts Callable<ImageProcessor> slices only."); } public void deleteSlice(int i) { throw new UnsupportedOperationException("LazyVirtualStack: can't remove slices."); } public void addSlice(final Callable<ImageProcessor> task) { tasks.add(task); } public ImageProcessor getProcessor(final int n) { try { return tasks.get(n-1).call(); } catch (Exception e) { IJError.print(e); } return null; } public int getSize() { return Math.max(initial_size, tasks.size()); } }