package fr.unistra.pelican.util; import fr.unistra.pelican.Image; /** * Create a view on only one band of another image. If you change a pixel in the view * instance, the base image is changed too, they share the same data. * * TODO: The copyImage is clearly unoptimal. * @author derivaux */ public class ImageWrapperBandSelector extends Image { private static final long serialVersionUID = -5087997422384216729L; private Image baseImage; private int numBand; private int offset; public ImageWrapperBandSelector(Image baseImage, int numBand){ super(baseImage.getXDim(), baseImage.getYDim(), baseImage.getZDim(), baseImage.getTDim(), 1); this.baseImage = baseImage; this.numBand = numBand; this.offset = numBand; // Yes it seems. } @Override public Image copyImage(boolean copyData) { Image _baseImage = baseImage.copyImage(copyData); return new ImageWrapperBandSelector(_baseImage, numBand); } @Override public Image newInstance(int xdim,int ydim,int zdim,int tdim,int bdim) { Image _baseImage = baseImage.newInstance(xdim,ydim,zdim,tdim,bdim); return new ImageWrapperBandSelector(_baseImage, numBand); } @Override public double getPixelDouble(int loc) { return baseImage.getPixelDouble(loc * baseImage.getBDim() + numBand); } @Override public int getPixelInt(int loc) { return baseImage.getPixelInt(loc * baseImage.getBDim() + numBand); } @Override public int getPixelByte(int loc) { return baseImage.getPixelByte(loc * baseImage.getBDim() + numBand); } @Override public boolean getPixelBoolean(int loc) { return baseImage.getPixelBoolean(loc * baseImage.getBDim() + numBand); } @Override public void setPixelDouble(int loc, double value) { baseImage.setPixelDouble(loc * baseImage.getBDim() + offset, value); } @Override public void setPixelInt(int loc, int value) { baseImage.setPixelInt(loc * baseImage.getBDim() + offset, value); } @Override public void setPixelByte(int loc, int value) { baseImage.setPixelByte(loc * baseImage.getBDim() + offset, value); } @Override public void setPixelBoolean(int loc, boolean value) { baseImage.setPixelBoolean(loc * baseImage.getBDim() + offset, value); } @Override public int size() { return baseImage.getXDim()*baseImage.getYDim()*baseImage.getZDim()*baseImage.getTDim(); } @Override public boolean equals(Image im) { // TODO Auto-generated method stub return false; } @Override public void setPixel(Image input, int x1, int y1, int z1, int t1, int b1, int x2, int y2, int z2, int t2, int b2) { baseImage.setPixel(input, x1, y1, z1, t1, b1, x2, y2, z2, t2, b2); } }