/* * Geotoolkit.org - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2012, Geomatys * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotoolkit.image.iterator; import java.awt.Rectangle; import java.awt.image.DataBuffer; import java.awt.image.Raster; import java.awt.image.WritableRenderedImage; import static org.junit.Assert.assertTrue; import org.opengis.coverage.grid.SequenceType; /** * <p>Class use to compare result between two distinct Iterators.<br/> * Only use for tests.</p> * * @author Remi Maréchal (Geomatys). */ public class PixelIteratorConform extends PixelIterator { private final PixelIterator pixelIter1; private final PixelIterator pixelIter2; public PixelIteratorConform(WritableRenderedImage image) { super(Raster.createBandedRaster(DataBuffer.TYPE_BYTE, 5, 5, 1, null), null); this.pixelIter1 = new DefaultWritableIterator(image, image, null); this.pixelIter2 = PixelIteratorFactory.createDefaultWriteableIterator(image, image); } public PixelIteratorConform(WritableRenderedImage image, Rectangle subArea) { super(Raster.createBandedRaster(DataBuffer.TYPE_BYTE, 5, 5, 1, null), null); this.pixelIter1 = new DefaultWritableIterator(image, image, subArea); this.pixelIter2 = PixelIteratorFactory.createDefaultWriteableIterator(image, image); } @Override public boolean next() { final boolean p1 = pixelIter1.next(); assertTrue(p1 == pixelIter2.next()); return p1; } @Override public int getX() { assertTrue(pixelIter1.getX() == pixelIter2.getX()); return pixelIter1.getX(); } @Override public int getY() { assertTrue(pixelIter1.getY() == pixelIter2.getY()); return pixelIter1.getY(); } @Override public int getSample() { assertTrue(pixelIter1.getSample() == pixelIter2.getSample()); return pixelIter1.getSample(); } @Override public float getSampleFloat() { assertTrue(Math.abs(pixelIter1.getSampleFloat() - pixelIter2.getSampleFloat())<=1E-9); return pixelIter1.getSampleFloat(); } @Override public double getSampleDouble() { assertTrue(Math.abs(pixelIter1.getSampleDouble() - pixelIter2.getSampleDouble())<=1E-9); return pixelIter1.getSampleDouble(); } @Override public void rewind() { pixelIter1.rewind(); pixelIter2.rewind(); } @Override public void setSample(int value) { pixelIter1.setSample(value); pixelIter2.setSample(value); } @Override public void setSampleFloat(float value) { pixelIter1.setSampleFloat(value); pixelIter2.setSampleFloat(value); } @Override public void setSampleDouble(double value) { pixelIter1.setSampleDouble(value); pixelIter2.setSampleDouble(value); } @Override public void close() { throw new UnsupportedOperationException("Not supported yet."); } @Override public int getNumBands() { assertTrue(pixelIter1.getNumBands() == pixelIter2.getNumBands()); return pixelIter1.getNumBands(); } @Override public void moveTo(int x, int y, int b) { pixelIter1.moveTo(x, y, b); pixelIter2.moveTo(x, y, b); } @Override public Rectangle getBoundary(boolean areaIterate) { assertTrue(pixelIter1.getBoundary(areaIterate).equals(pixelIter2.getBoundary(areaIterate))); return pixelIter1.getBoundary(areaIterate); } @Override public SequenceType getIterationDirection() { assertTrue(pixelIter1.getIterationDirection().equals(pixelIter2.getIterationDirection())); return pixelIter1.getIterationDirection(); } }