|
VirtualStack |
|
package ij; import ij.process.*; import ij.io.*; import java.awt.image.ColorModel; /** This class represents an array of disk-resident images. */ public class VirtualStack extends ImageStack { static final int INITIAL_SIZE = 100; String path; int nSlices; String[] names; /** Creates a new, empty virtual stack. */ public VirtualStack(int width, int height, ColorModel cm, String path) { super(width, height, cm); this.path = path; names = new String[INITIAL_SIZE]; //IJ.log("VirtualStack: "+path); } /** Adds an image to the end of the stack. */ public void addSlice(String name) { if (name==null) throw new IllegalArgumentException("'name' is null!"); nSlices++; //IJ.log("addSlice: "+nSlices+" "+name); if (nSlices==names.length) { String[] tmp = new String[nSlices*2]; System.arraycopy(names, 0, tmp, 0, nSlices); names = tmp; } names[nSlices-1] = name; } /** Does nothing. */ public void addSlice(String sliceLabel, Object pixels) { } /** Does nothing.. */ public void addSlice(String sliceLabel, ImageProcessor ip) { } /** Does noting. */ public void addSlice(String sliceLabel, ImageProcessor ip, int n) { } /** Deletes the specified slice, were 1<=n<=nslices. */ public void deleteSlice(int n) { if (n<1 || n>nSlices) throw new IllegalArgumentException("Argument out of range: "+n); if (nSlices<1) return; for (int i=n; i<nSlices; i++) names[i-1] = names[i]; names[nSlices-1] = null; nSlices--; } /** Deletes the last slice in the stack. */ public void deleteLastSlice() { if (nSlices>0) deleteSlice(nSlices); } /** Returns the pixel array for the specified slice, were 1<=n<=nslices. */ public Object getPixels(int n) { ImageProcessor ip = getProcessor(n); if (ip!=null) return ip.getPixels(); else return null; } /** Assigns a pixel array to the specified slice, were 1<=n<=nslices. */ public void setPixels(Object pixels, int n) { } /** Returns an ImageProcessor for the specified slice, were 1<=n<=nslices. Returns null if the stack is empty. */ public ImageProcessor getProcessor(int n) { //IJ.log("getProcessor: "+n+" "+names[n-1]); ImagePlus imp = new Opener().openImage(path, names[n-1]); if (imp!=null) { int w = imp.getWidth(); int h = imp.getHeight(); int type = imp.getType(); ColorModel cm = imp.getProcessor().getColorModel(); } else return null; return imp.getProcessor(); } /** Returns the number of slices in this stack. */ public int getSize() { return nSlices; } /** Returns the file name of the Nth image. */ public String getSliceLabel(int n) { return names[n-1]; } /** Returns null. */ public Object[] getImageArray() { return null; } /** Does nothing. */ public void setSliceLabel(String label, int n) { } /** Always return true. */ public boolean isVirtual() { return true; } /** Does nothing. */ public void trim() { } /** Returns the path to the directory containing the images. */ public String getDirectory() { return path; } /** Returns the file name of the specified slice, were 1<=n<=nslices. */ public String getFileName(int n) { return names[n-1]; } }
|
VirtualStack |
|