package fr.unistra.pelican; import java.io.File; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.HashMap; import fr.unistra.pelican.util.Point4D; import fr.unistra.pelican.util.largeImages.BooleanUnit; import fr.unistra.pelican.util.largeImages.ByteUnit; import fr.unistra.pelican.util.largeImages.IntegerUnit; import fr.unistra.pelican.util.largeImages.LargeImageInterface; import fr.unistra.pelican.util.largeImages.LargeImageMemoryManager; import fr.unistra.pelican.util.largeImages.LargeImageUtil; import fr.unistra.pelican.util.largeImages.Unit; /** * This class extends BooleanImage to add the memory management abilities from * LargeImageInterface. * * @see fr.unistra.pelican.BooleanImage * @see fr.unistra.pelican.util.largeImages.LargeImageInterface */ public class LargeBooleanImage extends BooleanImage implements LargeImageInterface { /** * Serial */ private static final long serialVersionUID = 2973804366084399140L; /** * File where data are cached when there is not enough memory */ private transient File fichier; /** * Stores number of pixels in the Image */ private long size; /** * Indicates how many units are contained in the image */ private int unitDim; /** * Indicates the length of a serialized unit */ protected long unitLength; /** * Indicates how many pixels are contained in each unit (in power of two) */ private int unitPowerSize = -1; /** * Hashmap which contains the soft references to the units */ private transient HashMap<Integer, Unit> unitMap; /** * Memory id given by the LargeImageMemoryManager */ private transient int memoryId; /** * unitId is a field in order to avoid creating it at each call of getPixel * or setPixel */ private transient long unitId; /** * unitLoc is a field in order to avoid creating it at each call of getPixel * or setPixel */ private transient long unitLoc; /** * Long version of xdim */ private long longXdim; /** * Long version of ydim */ private long longYdim; /** * Long version of zdim */ private long longZdim; /** * Long version of tdim */ private long longTdim; /** * Long version of bdim */ private long longBdim; /** * Constructs a LargeBooleanImage. */ public LargeBooleanImage() { super(); this.unitMap = new HashMap<Integer, Unit>(); this.memoryId = LargeImageMemoryManager.getInstance().addImage(this); } /** * Constructs a LargeBooleanImage identical to the given argument * * @param image * LargeBooleanImage to copy */ public LargeBooleanImage(LargeBooleanImage image) { this(image, true); } /** * Constructs a LargeBooleanImage from the given argument. The pixels are * copied if and only if ''copyData'' is set to true. * * @param image * LargeBooleanImage to copy * @param copydata * Indicates whether each pixels must be copied */ public LargeBooleanImage(LargeBooleanImage image, boolean copydata) { this(); this.initializeUnitPowerSize(image.getUnitPowerSize()); this.setDim(image.getXDim(), image.getYDim(), image.getZDim(), image .getTDim(), image.getBDim()); this.copyAttributes(image); this.setUnitDim(image.getUnitDim()); this.setUnitLength(image.getUnitLength()); this.createFile(); int uDim = this.getUnitDim(); if (copydata) { BooleanUnit currentUnit; for (int i = 0; i < uDim; i++) { currentUnit = image.getAnUnit(i).clone(); this.setUnit(currentUnit, i, true); } } else { fillFile(); } } /** * Constructs a LargeBooleanImage identical to the given argument * * @param image * Image to copy */ public LargeBooleanImage(Image image) { this(image, true, 0); } /** * Constructs a LargeBooleanImage from the given argument. The pixels are * copied if and only if ''copyData'' is set to true. * * @param image * Image to copy * @param copyData * Indicates whether each pixels must be copied */ public LargeBooleanImage(Image image, boolean copyData) { this(image, copyData, 0); } /** * Constructs a LargeBooleanImage from the given argument. The pixels are * copied if and only if ''copyData'' is set to true. * * @param image * Image to copy * @param copyData * if and only if it is set to true are the pixels copied * @param unitArea * Number of megabytes for each unit */ public LargeBooleanImage(Image image, boolean copyData, int unitArea) { this(); this.setDim(image.getXDim(), image.getYDim(), image.getZDim(), image .getTDim(), image.getBDim()); this.computeUnitSize(unitArea); this.copyAttributes(image); this.calculate(); this.createFile(); if (copyData == true) { int uSize = this.getUnitSize(); BooleanUnit currentUnit; // for each units except the last one we copy the pixels for (int i = 0; i < this.getUnitDim() - 1; i++) { currentUnit = this.newUnit(); for (int j = 0; j < uSize; j++) { currentUnit.setPixel(j, image.getPixelBoolean(j + (i << this.getUnitPowerSize()))); } this.setUnit(currentUnit, i, true); } // The last unit is not full of pixels so we take care not to ask // for out of bound pixels int i = this.getUnitDim() - 1; int size = image.size();//TODO if it is another large image it won't work yet currentUnit = this.newUnit(); for (int j = 0; (j + (i << this.getUnitPowerSize())) < size; j++) { currentUnit.setPixel(j, image.getPixelBoolean(j + (i << this.getUnitPowerSize()))); } this.setUnit(currentUnit, i, true); } else { this.fillFile(); } } /** * Constructs a LargeBooleanImage with the given dimensions * * @param xdim * the horizontal dimension * @param ydim * the vertical dimension * @param zdim * the depth * @param tdim * the frame number * @param bdim * the channel number */ public LargeBooleanImage(int xdim, int ydim, int zdim, int tdim, int bdim) { this(xdim, ydim, zdim, tdim, bdim, 0); } /** * Constructs a LargeBooleanImage with the given dimensions * * @param xdim * the horizontal dimension * @param ydim * the vertical dimension * @param zdim * the depth * @param tdim * the frame number * @param bdim * the channel number * @param unitArea * Number of megabytes for each unit */ public LargeBooleanImage(int xdim, int ydim, int zdim, int tdim, int bdim, int unitArea) { this(); this.setDim(xdim, ydim, zdim, tdim, bdim); this.computeUnitSize(unitArea); this.calculate(); this.createFile(); this.fillFile(); } @Override public LargeBooleanImage newInstance(int xdim, int ydim, int zdim, int tdim, int bdim) { return new LargeBooleanImage(xdim, ydim, zdim, tdim, bdim); } @Override public void calculate() { LargeImageUtil.calculate(this); } @Override public void close() { LargeImageUtil.close(this); } @Override public void computeUnitDim() { LargeImageUtil.computeUnitDim(this); } @Override public void computeUnitLength() { LargeImageUtil.computeUnitLength(this); } @Override public void computeUnitSize(int unitArea) { LargeImageUtil.computeUnitSize(this, unitArea, LargeImageUtil.BOOLEAN_DATALENGTH); } @Override public void createFile() { LargeImageUtil.createFile(this); } @Override public void discardUnit(int currentId) { LargeImageUtil.discardUnit(this, currentId); } @Override public void fillFile() { LargeImageUtil.fillFile(this); } @Override public BooleanUnit getAnUnit(int id) { return (BooleanUnit) LargeImageUtil.getAnUnit(this, id); } @Override public File getFile() { return this.fichier; } @Override public int getMemoryId() { return this.memoryId; } /** * Gets the pixel corresponding to the given location. * * @param loc * location of the pixel given as a long * @return the pixel value as a boolean */ private boolean getPixel(long loc) { unitId = loc >> getUnitPowerSize(); unitLoc = loc & ((1 << getUnitPowerSize()) - 1); BooleanUnit currentUnit = this.getAnUnit((int) unitId); return currentUnit.getPixel((int) unitLoc); } @Override public boolean getPixelBoolean(long loc) { return getPixel(loc); } @Override public boolean getPixelBoolean(int loc) { return getPixel(loc); } @Override public int getPixelByte(long loc) { return booleanToUnsignedByte(getPixel(loc)); } @Override public int getPixelByte(int loc) { return booleanToUnsignedByte(getPixel(loc)); } @Override public double getPixelDouble(long loc) { return booleanToDouble(getPixel(loc)); } @Override public double getPixelDouble(int loc) { return booleanToDouble(getPixel(loc)); } @Override public int getPixelInt(long loc) { return booleanToInt(getPixel(loc)); } @Override public int getPixelInt(int loc) { return booleanToInt(getPixel(loc)); } @Override public int getUnitDim() { return this.unitDim; } @Override public long getUnitLength() { return this.unitLength; } @Override public int getUnitPowerSize() { return this.unitPowerSize; } @Override public int getUnitSize() { return 1 << this.getUnitPowerSize(); } @Override public void initializeUnitPowerSize(int newSize) { if (this.unitPowerSize != -1) { throw new PelicanException( "Someone tried to initialize unit power size twice"); } this.unitPowerSize = newSize; } @Override public BooleanUnit loadAnUnit(int id) { return (BooleanUnit) LargeImageUtil.loadAnUnit(this, id); } @Override public BooleanUnit newUnit() { return new BooleanUnit(this.getUnitSize()); } @Override public void putUnitIntoMap(int currentId, Unit currentUnit) { if (!(currentUnit instanceof BooleanUnit)) { throw new PelicanException( "Someone tried to put a wrong unit in a LargeBooleanImage"); } this.unitMap.put(currentId, (BooleanUnit) currentUnit); } @Override public void setFile(File fichier) { this.fichier = fichier; } /** * Sets the pixels at the given location to the given value as boolean * * @param loc * index of the pixel to modify * @param value * desired value of the pixel as boolean */ private void setPixel(long loc, boolean value) { unitId = loc >> getUnitPowerSize(); unitLoc = loc & ((1 << getUnitPowerSize()) - 1); LargeImageMemoryManager.getInstance().lock.lock(); try{ BooleanUnit currentUnit = this.getAnUnit((int) unitId); currentUnit.setPixel((int) unitLoc, value); }finally{ LargeImageMemoryManager.getInstance().lock.unlock(); } } @Override public void setPixelBoolean(long loc, boolean value) { this.setPixel(loc, value); } @Override public void setPixelBoolean(int loc, boolean value) { this.setPixel(loc, value); } @Override public void setPixelByte(long loc, int value) { this.setPixel(loc, unsignedByteToBoolean(value)); } @Override public void setPixelByte(int loc, int value) { this.setPixel(loc, unsignedByteToBoolean(value)); } @Override public void setPixelDouble(long loc, double value) { this.setPixel(loc, doubleToBoolean(value)); } @Override public void setPixelDouble(int loc, double value) { this.setPixel(loc, doubleToBoolean(value)); } @Override public void setPixelInt(long loc, int value) { this.setPixel(loc, intToBoolean(value)); } @Override public void setPixelInt(int loc, int value) { this.setPixel(loc, intToBoolean(value)); } @Override public void setSize(long newSize) { this.size = newSize; } @Override public void setUnit(Unit currentUnit, int currentId, boolean modified) { LargeImageUtil.setUnit(this, currentUnit, currentId, modified); } @Override public void setUnitDim(int newUnitDim) { this.unitDim = newUnitDim; } @Override public void setUnitLength(long newUnitLength) { this.unitLength = newUnitLength; } /** * Should be removed as soon as possible. * @return */ public long sizeL() { return this.size; } @Override public int size() {// TODO return (int) this.size; } @Override public boolean isEmpty() { for (int i = 0; i < this.getUnitDim(); i++) { if (!this.getAnUnit(i).isEmpty()) { return false; } } return true; } @Override public boolean[] getPixels() { throw new PelicanException( "You can not getPixels on a large Image. Please correct your algorithm to avoid this method"); } @Override public void setPixels(boolean[] values) { throw new PelicanException( "You can not setPixels on a large Image. Please correct your algorithm to avoid this method"); } @Override public boolean equals(Image im) { if ((im == null) || !(im instanceof BooleanImage)) { return false; } if (!haveSameDimensions(this, im)) { return false; } boolean thispresent; for(long i = 0; i < size; i++) { thispresent = this.isPresent(i); if ( im.isPresent(i) != thispresent ) return false; if ( thispresent ) if ( im.getPixelBoolean(i) != this.getPixelBoolean(i) ) return false; } return true; } @Override public LargeIntegerImage copyToIntegerImage() { LargeIntegerImage i = new LargeIntegerImage(); i.initializeUnitPowerSize(this.getUnitPowerSize()-2); i.setDim(this.getXDim(), this.getYDim(), this.getZDim(), this.getTDim(), this.getBDim()); i.copyAttributes(this); i.calculate(); i.createFile(); i.fillFile(); BooleanUnit boolUnit=null; IntegerUnit newIntUnit; int j; for (int u =0; u<i.getUnitDim();u++){ j=u%4; if(j==0){ boolUnit = this.getAnUnit(u>>2); } newIntUnit =i.newUnit(); for (int k=0;k<newIntUnit.size();k++){ newIntUnit.setPixel(k, boolUnit.getPixel(k+j*newIntUnit.size())?1:0); } i.setUnit(newIntUnit, u, true); } return i; } @Override protected void finalize() throws Throwable { try { this.close(); } finally { super.finalize(); } } @Override public LargeBooleanImage copyImage(boolean copyData) { return new LargeBooleanImage(this, copyData); } @Override public void fill(boolean b) { int size = this.getUnitSize(); BooleanUnit boolUnit = new BooleanUnit(size, b); for (int i = 0; i < this.getUnitDim(); i++) { this.setUnit(boolUnit.clone(), i, true); } } @Override public LargeBooleanImage getComplement() { LargeBooleanImage im = new LargeBooleanImage(this,false); for (int u =0;u<this.getUnitDim();u++){ im.setUnit(this.getAnUnit(u).getComplement(), u, true); } return im; } @Override public int getSum() { System.err.println("Someone getSum on a largeImage, result may not be accurate"); int sum = 0; for (long i = 0; i < size; i++) { if (isPresent(i) && getPixelBoolean(i)) { sum++; } } return sum; } @Override public Point4D[] foreground() { int s = getSum(); Point4D tab[] = new Point4D[s]; int k = 0; for (int t = 0; t < tdim; t++) { for (int z = 0; z < zdim; z++) { for (int y = 0; y < ydim; y++) { for (int x = 0; x < xdim; x++) { if (isPresentXYZT(x, y, z, t) && getPixelXYZTBoolean(x, y, z, t)) { tab[k++] = new Point4D(x, y, z, t); } } } } } return tab; } @Override public LargeByteImage copyToByteImage() { LargeByteImage i = new LargeByteImage(); i.initializeUnitPowerSize(this.getUnitPowerSize()); i.setDim(this.getXDim(), this.getYDim(), this.getZDim(), this.getTDim(), this.getBDim()); i.copyAttributes(this); i.calculate(); i.createFile(); i.fillFile(); BooleanUnit boolUnit=null; ByteUnit newByteUnit; for (int u =0; u<i.getUnitDim();u++){ boolUnit = this.getAnUnit(u); newByteUnit =i.newUnit(); for (int k=0;k<boolUnit.size();k++){ newByteUnit.setPixel(k, boolUnit.getPixel(k)? ((byte)-127 ):((byte)-128)); } i.setUnit(newByteUnit, u, true); } return i; } @Override public HashMap<Integer, Unit> getMap() { return this.unitMap; } @Override public String getWorkingFileSuffix() { return ".largebool"; } @Override public void saveData() { LargeImageUtil.saveData(this); } private void readObject(ObjectInputStream in) throws IOException,ClassNotFoundException { in.defaultReadObject(); this.unitMap = new HashMap<Integer, Unit>(); this.memoryId = LargeImageMemoryManager.getInstance().addImage(this); this.createFile(); BooleanUnit unit; for(int u=0;u<this.getUnitDim();u++){ unit = (BooleanUnit) in.readObject(); this.setUnit(unit, u, true); } } private void writeObject(ObjectOutputStream out) throws IOException{ out.defaultWriteObject(); for(int u=0;u<this.getUnitDim();u++){ out.writeObject(this.getAnUnit(u)); } } @Override public boolean maximum(){ for (int u = 0; u < this.getUnitDim(); u++) if (this.getAnUnit(u).maximum()) return true; return false; } @Override public boolean minimum(){ for (int u = 0; u < this.getUnitDim(); u++) if (!this.getAnUnit(u).minimum()) return false; return true; } @Override public boolean maximum(int band){ for (int u = 0; u < this.getUnitDim(); u++) if (this.getAnUnit(u).maximum(band)) return true; return false; } @Override public boolean minimum(int band){ for (int u = 0; u < this.getUnitDim(); u++) if (!this.getAnUnit(u).minimum(band)) return false; return true; } /* * Image methods * ************************************************************* */ @Override public double volume() { return LargeImageUtil.volume(this); } @Override public int volumeByte() { return LargeImageUtil.volumeByte(this); } @Override public double getPixelDouble(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBDouble(this, x, y, z, t, b); } @Override public double getPixelXYDouble(int x, int y) { return LargeImageUtil.getPixelXYDouble(this, x, y); } @Override public double getPixelXYZDouble(int x, int y, int z) { return LargeImageUtil.getPixelXYZDouble(this, x, y, z); } @Override public double getPixelXYBDouble(int x, int y, int b) { return LargeImageUtil.getPixelXYBDouble(this, x, y, b); } @Override public double getPixelXYTDouble(int x, int y, int t) { return LargeImageUtil.getPixelXYTDouble(this, x, y, t); } @Override public double getPixelXYZTDouble(int x, int y, int z, int t) { return LargeImageUtil.getPixelXYZTDouble(this, x, y, z, t); } @Override public double getPixelXYZBDouble(int x, int y, int z, int b) { return LargeImageUtil.getPixelXYZBDouble(this, x, y, z, b); } @Override public double getPixelXYTBDouble(int x, int y, int t, int b) { return LargeImageUtil.getPixelXYTBDouble(this, x, y, t, b); } @Override public double getPixelXYZTBDouble(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBDouble(this, x, y, z, t, b); } @Override public void setPixelDouble(int x, int y, int z, int t, int b, double value) { LargeImageUtil.setPixelXYZTBDouble(this, x, y, z, t, b, value); } @Override public void setPixelXYDouble(int x, int y, double value) { LargeImageUtil.setPixelXYDouble(this, x, y, value); } @Override public void setPixelXYZDouble(int x, int y, int z, double value) { LargeImageUtil.setPixelXYZDouble(this, x, y, z, value); } @Override public void setPixelXYBDouble(int x, int y, int b, double value) { LargeImageUtil.setPixelXYBDouble(this, x, y, b, value); } @Override public void setPixelXYTDouble(int x, int y, int t, double value) { LargeImageUtil.setPixelXYTDouble(this, x, y, t, value); } @Override public void setPixelXYZTDouble(int x, int y, int z, int t, double value) { LargeImageUtil.setPixelXYZTDouble(this, x, y, z, t, value); } @Override public void setPixelXYZBDouble(int x, int y, int z, int b, double value) { LargeImageUtil.setPixelXYZBDouble(this, x, y, z, b, value); } @Override public void setPixelXYTBDouble(int x, int y, int t, int b, double value) { LargeImageUtil.setPixelXYTBDouble(this, x, y, t, b, value); } @Override public void setPixelXYZTBDouble(int x, int y, int z, int t, int b, double value) { LargeImageUtil.setPixelXYZTBDouble(this, x, y, z, t, b, value); } @Override public int getPixelInt(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBInt(this, x, y, z, t, b); } @Override public int getPixelXYInt(int x, int y) { return LargeImageUtil.getPixelXYInt(this, x, y); } @Override public int getPixelXYZInt(int x, int y, int z) { return LargeImageUtil.getPixelXYZInt(this, x, y, z); } @Override public int getPixelXYBInt(int x, int y, int b) { return LargeImageUtil.getPixelXYBInt(this, x, y, b); } @Override public int getPixelXYTInt(int x, int y, int t) { return LargeImageUtil.getPixelXYTInt(this, x, y, t); } @Override public int getPixelXYZTInt(int x, int y, int z, int t) { return LargeImageUtil.getPixelXYZTInt(this, x, y, z, t); } @Override public int getPixelXYZBInt(int x, int y, int z, int b) { return LargeImageUtil.getPixelXYZBInt(this, x, y, z, b); } @Override public int getPixelXYTBInt(int x, int y, int t, int b) { return LargeImageUtil.getPixelXYTBInt(this, x, y, t, b); } @Override public int getPixelXYZTBInt(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBInt(this, x, y, z, t, b); } @Override public void setPixelInt(int x, int y, int z, int t, int b, int value) { LargeImageUtil.setPixelXYZTBInt(this, x, y, z, t, b, value); } @Override public void setPixelXYInt(int x, int y, int value) { LargeImageUtil.setPixelXYInt(this, x, y, value); } @Override public void setPixelXYZInt(int x, int y, int z, int value) { LargeImageUtil.setPixelXYZInt(this, x, y, z, value); } @Override public void setPixelXYBInt(int x, int y, int b, int value) { LargeImageUtil.setPixelXYBInt(this, x, y, b, value); } @Override public void setPixelXYTInt(int x, int y, int t, int value) { LargeImageUtil.setPixelXYTInt(this, x, y, t, value); } @Override public void setPixelXYZTInt(int x, int y, int z, int t, int value) { LargeImageUtil.setPixelXYZTInt(this, x, y, z, t, value); } @Override public void setPixelXYZBInt(int x, int y, int z, int b, int value) { LargeImageUtil.setPixelXYZBInt(this, x, y, z, b, value); } @Override public void setPixelXYTBInt(int x, int y, int t, int b, int value) { LargeImageUtil.setPixelXYTBInt(this, x, y, t, b, value); } @Override public void setPixelXYZTBInt(int x, int y, int z, int t, int b, int value) { LargeImageUtil.setPixelXYZTBInt(this, x, y, z, t, b, value); } @Override public int getPixelByte(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBByte(this, x, y, z, t, b); } @Override public int getPixelXYByte(int x, int y) { return LargeImageUtil.getPixelXYByte(this, x, y); } @Override public int getPixelXYZByte(int x, int y, int z) { return LargeImageUtil.getPixelXYZByte(this, x, y, z); } @Override public int getPixelXYBByte(int x, int y, int b) { return LargeImageUtil.getPixelXYBByte(this, x, y, b); } @Override public int getPixelXYTByte(int x, int y, int t) { return LargeImageUtil.getPixelXYTByte(this, x, y, t); } @Override public int getPixelXYZTByte(int x, int y, int z, int t) { return LargeImageUtil.getPixelXYZTByte(this, x, y, z, t); } @Override public int getPixelXYZBByte(int x, int y, int z, int b) { return LargeImageUtil.getPixelXYZBByte(this, x, y, z, b); } @Override public int getPixelXYTBByte(int x, int y, int t, int b) { return LargeImageUtil.getPixelXYTBByte(this, x, y, t, b); } @Override public int getPixelXYZTBByte(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBByte(this, x, y, z, t, b); } @Override public void setPixelByte(int x, int y, int z, int t, int b, int value) { LargeImageUtil.setPixelXYZTBByte(this, x, y, z, t, b, value); } @Override public void setPixelXYByte(int x, int y, int value) { LargeImageUtil.setPixelXYByte(this, x, y, value); } @Override public void setPixelXYZByte(int x, int y, int z, int value) { LargeImageUtil.setPixelXYZByte(this, x, y, z, value); } @Override public void setPixelXYBByte(int x, int y, int b, int value) { LargeImageUtil.setPixelXYBByte(this, x, y, b, value); } @Override public void setPixelXYTByte(int x, int y, int t, int value) { LargeImageUtil.setPixelXYTByte(this, x, y, t, value); } @Override public void setPixelXYZTByte(int x, int y, int z, int t, int value) { LargeImageUtil.setPixelXYZTByte(this, x, y, z, t, value); } @Override public void setPixelXYZBByte(int x, int y, int z, int b, int value) { LargeImageUtil.setPixelXYZBByte(this, x, y, z, b, value); } @Override public void setPixelXYTBByte(int x, int y, int t, int b, int value) { LargeImageUtil.setPixelXYTBByte(this, x, y, t, b, value); } @Override public void setPixelXYZTBByte(int x, int y, int z, int t, int b, int value) { LargeImageUtil.setPixelXYZTBByte(this, x, y, z, t, b, value); } @Override public boolean getPixelBoolean(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBBoolean(this, x, y, z, t, b); } @Override public boolean getPixelXYBoolean(int x, int y) { return LargeImageUtil.getPixelXYBoolean(this, x, y); } @Override public boolean getPixelXYZBoolean(int x, int y, int z) { return LargeImageUtil.getPixelXYZBoolean(this, x, y, z); } @Override public boolean getPixelXYBBoolean(int x, int y, int b) { return LargeImageUtil.getPixelXYBBoolean(this, x, y, b); } @Override public boolean getPixelXYTBoolean(int x, int y, int t) { return LargeImageUtil.getPixelXYTBoolean(this, x, y, t); } @Override public boolean getPixelXYZTBoolean(int x, int y, int z, int t) { return LargeImageUtil.getPixelXYZTBoolean(this, x, y, z, t); } @Override public boolean getPixelXYZBBoolean(int x, int y, int z, int b) { return LargeImageUtil.getPixelXYZBBoolean(this, x, y, z, b); } @Override public boolean getPixelXYTBBoolean(int x, int y, int t, int b) { return LargeImageUtil.getPixelXYTBBoolean(this, x, y, t, b); } @Override public boolean getPixelXYZTBBoolean(int x, int y, int z, int t, int b) { return LargeImageUtil.getPixelXYZTBBoolean(this, x, y, z, t, b); } @Override public void setPixelBoolean(int x, int y, int z, int t, int b, boolean value) { LargeImageUtil.setPixelXYZTBBoolean(this, x, y, z, t, b, value); } @Override public void setPixelXYBoolean(int x, int y, boolean value) { LargeImageUtil.setPixelXYBoolean(this, x, y, value); } @Override public void setPixelXYZBoolean(int x, int y, int z, boolean value) { LargeImageUtil.setPixelXYZBoolean(this, x, y, z, value); } @Override public void setPixelXYBBoolean(int x, int y, int b, boolean value) { LargeImageUtil.setPixelXYBBoolean(this, x, y, b, value); } @Override public void setPixelXYTBoolean(int x, int y, int t, boolean value) { LargeImageUtil.setPixelXYTBoolean(this, x, y, t, value); } @Override public void setPixelXYZTBoolean(int x, int y, int z, int t, boolean value) { LargeImageUtil.setPixelXYZTBoolean(this, x, y, z, t, value); } @Override public void setPixelXYZBBoolean(int x, int y, int z, int b, boolean value) { LargeImageUtil.setPixelXYZBBoolean(this, x, y, z, b, value); } @Override public void setPixelXYTBBoolean(int x, int y, int t, int b, boolean value) { LargeImageUtil.setPixelXYTBBoolean(this, x, y, t, b, value); } @Override public void setPixelXYZTBBoolean(int x, int y, int z, int t, int b, boolean value) { LargeImageUtil.setPixelXYZTBBoolean(this, x, y, z, t, b, value); } /* * Mask management************************************************** */ @Override public boolean isInMask(int loc) { return LargeImageUtil.isInMask(this, loc); } @Override public boolean isInMask(long loc) { return LargeImageUtil.isInMask(this, loc); } @Override public boolean isPresent(int loc) { return LargeImageUtil.isPresent(this, loc); } @Override public boolean isPresent(long loc) { return LargeImageUtil.isPresent(this, loc); } @Override public int getNumberOfPresentPixel() { return LargeImageUtil.getNumberOfPresentPixel(this); } @Override public int getNumberOfPresentPixel(int band) { return LargeImageUtil.getNumberOfPresentPixel(this, band); } @Override public long getLongBDim() { return this.longBdim; } @Override public long getLongTDim() { return this.longTdim; } @Override public long getLongXDim() { return this.longXdim; } @Override public long getLongYDim() { return this.longYdim; } @Override public long getLongZDim() { return this.longZdim; } @Override public void setXDim(int xdim) { super.setXDim(xdim); this.longXdim = (long) xdim; } @Override public void setYDim(int ydim) { super.setYDim(ydim); this.longYdim = (long) ydim; } @Override public void setZDim(int zdim) { super.setZDim(zdim); this.longZdim = (long) zdim; } @Override public void setTDim(int tdim) { super.setTDim(tdim); this.longTdim = (long) tdim; } @Override public void setBDim(int bdim) { super.setBDim(bdim); this.longBdim = (long) bdim; } @Override public void setDim(int x, int y, int z, int t, int b) { super.setDim(x, y, z, t, b); this.setSize((long) x * (long) y * (long) z * (long) t * (long) b); } /* * Constructors */ @Override public LargeBooleanImage newBooleanImage() { return LargeImageUtil.newBooleanImage(this,false); } @Override public LargeBooleanImage newBooleanImage(boolean copyData) { return LargeImageUtil.newBooleanImage(this,copyData); } @Override public LargeBooleanImage newBooleanImage(int x, int y, int z, int t, int b) { return LargeImageUtil.newBooleanImage(x, y, z, t, b); } @Override public LargeByteImage newByteImage() { return LargeImageUtil.newByteImage(this,false); } @Override public LargeByteImage newByteImage(boolean copyData) { return LargeImageUtil.newByteImage(this,copyData); } @Override public LargeByteImage newByteImage(int x, int y, int z, int t, int b) { return LargeImageUtil.newByteImage(x,y,z,t,b); } @Override public LargeDoubleImage newDoubleImage() { return LargeImageUtil.newDoubleImage(this,false); } @Override public LargeDoubleImage newDoubleImage(boolean copyData) { return LargeImageUtil.newDoubleImage(this,copyData); } @Override public LargeDoubleImage newDoubleImage(int x, int y, int z, int t, int b) { return LargeImageUtil.newDoubleImage(x, y, z, t, b); } @Override public LargeIntegerImage newIntegerImage() { return LargeImageUtil.newIntegerImage(this,false); } @Override public LargeIntegerImage newIntegerImage(boolean copyData) { return LargeImageUtil.newIntegerImage(this, copyData); } @Override public LargeIntegerImage newIntegerImage(int x, int y, int z, int t, int b) { return LargeImageUtil.newIntegerImage(x,y,z,t,b); } }