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.largeImages.ByteUnit; import fr.unistra.pelican.util.largeImages.DoubleUnit; 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 IntegerImage to add the memory management abilities from * LargeImageInterface. * * @see fr.unistra.pelican.IntegerImage * @see fr.unistra.pelican.util.largeImages.LargeImageInterface */ public class LargeIntegerImage extends IntegerImage implements LargeImageInterface { /** * Serial */ private static final long serialVersionUID = -7715039485054323729L; /** * 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 LargeIntegerImage. */ public LargeIntegerImage() { super(); this.unitMap = new HashMap<Integer, Unit>(); this.memoryId = LargeImageMemoryManager.getInstance().addImage(this); } /** * Constructs a LargeIntegerImage identical to the given argument * * @param image * LargeIntegerImage to copy */ public LargeIntegerImage(LargeIntegerImage image) { this(image, true); } /** * Constructs a LargeIntegerImage from the given argument. The pixels are * copied if and only if ''copyData'' is set to true. * * @param image * LargeIntegerImage to copy * @param copydata * Indicates whether each pixels must be copied */ public LargeIntegerImage(LargeIntegerImage 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) { IntegerUnit currentUnit; for (int i = 0; i < uDim; i++) { currentUnit = image.getAnUnit(i).clone(); this.setUnit(currentUnit, i, true); } } else { fillFile(); } } /** * Constructs a LargeIntegerImage identical to the given argument * * @param image * Image to copy */ public LargeIntegerImage(Image image) { this(image, true, 0); } /** * Constructs a LargeIntegerImage 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 LargeIntegerImage(Image image, boolean copyData) { this(image, copyData, 0); } /** * Constructs a LargeIntegerImage 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 LargeIntegerImage(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(); IntegerUnit 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.getPixelInt(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.getPixelInt(j + (i << this.getUnitPowerSize()))); } this.setUnit(currentUnit, i, true); } else { this.fillFile(); } } /** * Constructs a LargeIntegerImage 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 LargeIntegerImage(int xdim, int ydim, int zdim, int tdim, int bdim) { this(xdim, ydim, zdim, tdim, bdim, 0); } /** * Constructs a LargeIntegerImage 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 LargeIntegerImage(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 LargeIntegerImage newInstance(int xdim, int ydim, int zdim, int tdim, int bdim) { return new LargeIntegerImage(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.INTEGER_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 IntegerUnit getAnUnit(int id) { return (IntegerUnit) 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 an integer */ private int getPixel(long loc) { unitId = loc >> getUnitPowerSize(); unitLoc = loc & ((1 << getUnitPowerSize()) - 1); IntegerUnit currentUnit = this.getAnUnit((int) unitId); return currentUnit.getPixel((int) unitLoc); } @Override public boolean getPixelBoolean(long loc) { return intToBoolean(getPixel(loc)); //return (getPixel(loc) > Integer.MAX_VALUE / 2) ? true : false; } @Override public boolean getPixelBoolean(int loc) { return intToBoolean(getPixel(loc)); //return (getPixel(loc) > Integer.MAX_VALUE / 2) ? true : false; } @Override public int getPixelByte(long loc) { return intToUnsignedByte(getPixel(loc)); // return (getPixel(loc) >> 24) - Byte.MIN_VALUE; } @Override public int getPixelByte(int loc) { return intToUnsignedByte(getPixel(loc)); // return (getPixel(loc) >> 24) - Byte.MIN_VALUE; } @Override public double getPixelDouble(long loc) { return intToDouble(getPixel(loc)); // return DoubleImage.intToDouble * (double) getPixel(loc) + 0.5; } @Override public double getPixelDouble(int loc) { return intToDouble(getPixel(loc)); // return DoubleImage.intToDouble * (double) getPixel(loc) + 0.5; } @Override public int getPixelInt(long loc) { return getPixel(loc); } @Override public int getPixelInt(int loc) { return 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 IntegerUnit loadAnUnit(int id) { return (IntegerUnit) LargeImageUtil.loadAnUnit(this, id); } @Override public IntegerUnit newUnit() { return new IntegerUnit(this.getUnitSize()); } @Override public void putUnitIntoMap(int currentId, Unit currentUnit) { if (!(currentUnit instanceof IntegerUnit)) { throw new PelicanException( "Someone tried to put a wrong unit in a LargeIntegerImage"); } this.unitMap.put(currentId, (IntegerUnit) currentUnit); } @Override public void setFile(File fichier) { this.fichier = fichier; } /** * Sets the pixels at the given location to the given value as integer * * @param loc * index of the pixel to modify * @param value * desired value of the pixel as integer */ private void setPixel(long loc, int value) { unitId = loc >> getUnitPowerSize(); unitLoc = loc & ((1 << getUnitPowerSize()) - 1); LargeImageMemoryManager.getInstance().lock.lock(); try{ IntegerUnit currentUnit = this.getAnUnit((int) unitId); currentUnit.setPixel((int) unitLoc, value); }finally{ LargeImageMemoryManager.getInstance().lock.unlock(); } } @Override public void setPixelBoolean(long loc, boolean value) { setPixel(loc, booleanToInt(value)); // setPixel(loc, value ? Integer.MAX_VALUE : 0); } @Override public void setPixelBoolean(int loc, boolean value) { setPixel(loc, booleanToInt(value)); // setPixel(loc, value ? Integer.MAX_VALUE : 0); } @Override public void setPixelByte(long loc, int value) { setPixel(loc, unsignedByteToInt(value)); // setPixel(loc, (value + Byte.MIN_VALUE) << 24); } @Override public void setPixelByte(int loc, int value) { setPixel(loc, unsignedByteToInt(value)); // setPixel(loc, (value + Byte.MIN_VALUE) << 24); } @Override public void setPixelDouble(long loc, double value) { setPixel(loc,doubleToInt(value)); // setPixel(loc, (int) ((value - 0.5) * doubleToInt)); } @Override public void setPixelDouble(int loc, double value) { setPixel(loc,doubleToInt(value)); // setPixel(loc, (int) ((value - 0.5) * doubleToInt)); } @Override public void setPixelInt(long loc, int value) { setPixel(loc, value); } @Override public void setPixelInt(int loc, int value) { setPixel(loc, 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; } public long sizeL() { return this.size; } @Override public int size() {// TODO return (int) this.size; } @Override public boolean equals(Image im) { if ((im == null) || !(im instanceof IntegerImage)) { return false; } if (!haveSameDimensions(this, im)) { return false; } if (im instanceof LargeIntegerImage){ for(int u=0;u<this.getUnitDim();u++){ if (!this.getAnUnit(u).equals(((LargeIntegerImage)im).getAnUnit(u))){ return false; } } }else{ for (long i = 0; i < size; i++) { if (((IntegerImage) im).getPixelInt(i) != getPixelInt(i)) { return false; } } } return true; } @Override protected void finalize() throws Throwable { try { this.close(); } finally { super.finalize(); } } @Override public LargeIntegerImage copyImage(boolean copyData) { return new LargeIntegerImage(this, copyData); } @Override public void fill(int b) { int size = this.getUnitSize(); IntegerUnit intUnit = new IntegerUnit(size, b); for (int i = 0; i < this.getUnitDim(); i++) { this.setUnit(intUnit.clone(), i, true); } } @Override public LargeByteImage copyToByteImage() { LargeByteImage i = new LargeByteImage(); 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(); ByteUnit byteUnit=null; IntegerUnit intUnit; int j; for (int u =0; u<this.getUnitDim();u++){ j=u%4; if(j==0){ if(u!=0){ i.setUnit(byteUnit, (u>>2)-1, true); } byteUnit = i.newUnit(); } intUnit = this.getAnUnit(u); for(int k = 0; k<intUnit.size();k++){ byteUnit.setPixel(j*intUnit.size()+k, unsignedByteToSignedByte(intUnit.getPixel(k))); } } i.setUnit(byteUnit, i.getUnitDim()-1, true); return i; } @Override public LargeByteImage convertToByteImage() { LargeIntegerImage i = scaleToVisibleRange(); LargeByteImage b = new LargeByteImage(); b.initializeUnitPowerSize(this.getUnitPowerSize()+2); b.setDim(this.getXDim(), this.getYDim(), this.getZDim(), this.getTDim(), this.getBDim()); b.copyAttributes(this); b.calculate(); b.createFile(); b.fillFile(); ByteUnit byteUnit=null; IntegerUnit intUnit; int j; for (int u =0; u<this.getUnitDim();u++){ j=u%4; if(j==0){ if(u!=0){ b.setUnit(byteUnit,((u>>2)-1), true); } byteUnit = b.newUnit(); } intUnit = i.getAnUnit(u); for(int k = 0; k<intUnit.size();k++){ byteUnit.setPixel(j*intUnit.size()+k, intToSignedByte(intUnit.getPixel(k))); } } b.setUnit(byteUnit,b.getUnitDim()-1, true); return b; } @Override public LargeIntegerImage scaleToVisibleRange() {//TODO fusion with convertToByteImage LargeIntegerImage d = this.copyImage(false); int min = Integer.MAX_VALUE; int max = Integer.MIN_VALUE; int tmp; IntegerUnit intUnit; IntegerUnit newIntUnit; for (int u =0; u<this.getUnitDim();u++){ intUnit = this.getAnUnit(u); for (int i=0;i<intUnit.size();i++){ tmp = intUnit.getPixel(i); if (min > tmp) { min = tmp; } if (max < tmp) { max = tmp; } } } double dist = (long)max - (long)min; double value; if (max != min) { for (int u =0; u<this.getUnitDim();u++){ intUnit = this.getAnUnit(u); newIntUnit =d.newUnit(); for (int i=0;i<intUnit.size();i++){ tmp = intUnit.getPixel(i); value = ((double) ((long)tmp - (long)min) / dist); newIntUnit.setPixel(i, doubleToInt(value)); } d.setUnit(newIntUnit, u, true); } } else { System.err.println("Scaling error"); } return d; } @Override public LargeDoubleImage normalise() { LargeDoubleImage d = new LargeDoubleImage(); d.initializeUnitPowerSize(this.getUnitPowerSize()-1); d.setDim(this.getXDim(), this.getYDim(), this.getZDim(), this.getTDim(), this.getBDim()); d.copyAttributes(this); d.calculate(); d.createFile(); d.fillFile(); IntegerUnit intUnit=null; int minInt = Integer.MAX_VALUE; int maxInt = Integer.MIN_VALUE; int tmp; for (int u =0; u<this.getUnitDim();u++){ intUnit = this.getAnUnit(u); for (int i=0;i<intUnit.size();i++){ tmp = intUnit.getPixel(i); if (minInt > tmp) { minInt = tmp; } if (maxInt < tmp) { maxInt = tmp; } } } double min = intToDouble(minInt); double max = intToDouble(maxInt); DoubleUnit newDoubleUnit; int j; double dist = max - min; double value; if (max != min) { for (int u =0; u<d.getUnitDim();u++){ j=u%2; if(j==0){ intUnit = this.getAnUnit(u>>1); } newDoubleUnit =d.newUnit(); for (int i=0;i<newDoubleUnit.size();i++){ tmp = intUnit.getPixel(i+j*newDoubleUnit.size()); value = ((double) ((long)tmp - (long)min) / dist); newDoubleUnit.setPixel(i, value); } d.setUnit(newDoubleUnit, u, true); } } else { System.err.println("Scaling error"); } return d; } @Override public HashMap<Integer, Unit> getMap() { return this.unitMap; } @Override public String getWorkingFileSuffix() { return ".largeinteger"; } @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(); IntegerUnit unit; for(int u=0;u<this.getUnitDim();u++){ unit = (IntegerUnit) 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 int maximum(){ int val = Integer.MIN_VALUE; int currVal; for (int u = 0; u < this.getUnitDim(); u++){ currVal = this.getAnUnit(u).maximum(); if (currVal>val){ val = currVal; } } return val; } @Override public int minimum(){ int val = Integer.MAX_VALUE; int currVal; for (int u = 0; u < this.getUnitDim(); u++){ currVal = this.getAnUnit(u).minimum(); if (currVal<val){ val = currVal; } } return val; } @Override public int maximum(int band){ int val = Integer.MIN_VALUE; int currVal; for (int u = 0; u < this.getUnitDim(); u++){ currVal = this.getAnUnit(u).maximum(band); if (currVal>val){ val = currVal; } } return val; } @Override public int minimum(int band){ int val = Integer.MAX_VALUE; int currVal; for (int u = 0; u < this.getUnitDim(); u++){ currVal = this.getAnUnit(u).minimum(band); if (currVal<val){ val = currVal; } } return val; } /* * 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 setPixels(int[] values) { throw new PelicanException( "You can not use setPixels(int[]) in a LargeImage"); } @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); } }