/*
* 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.*;
import javax.media.jai.TiledImage;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Implement only row major writable tests.
*
* @author RĂ©mi Marechal (Geomatys).
*/
public abstract class RowMajorWritableTest extends WritableIteratorTest {
/**
* {@inheritDoc }.
*/
@Override
public void differentMinRasterReadTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void rectContainsRasterReadTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void rectLowerLeftRasterReadTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void rectLowerRightRasterReadTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void rectUpperLeftRasterReadTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void rectUpperRightRasterReadTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void rasterContainsRectReadTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void unappropriateRectRasterTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
public void unappropriateMoveToRasterTest() {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
protected void setRasterTest(int minx, int miny, int width, int height, int numBand, Rectangle subArea) {
//no test about raster for this iterator.
}
/**
* {@inheritDoc }.
*/
@Override
protected void setPixelIterator(Raster raster) {
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* {@inheritDoc }.
*/
@Override
protected void setPixelIterator(Raster raster, Rectangle subArea) {
throw new UnsupportedOperationException("Not supported yet.");
}
/**
* {@inheritDoc }.
*/
@Override
protected void setPixelIterator(RenderedImage renderedImage) {
pixIterator = PixelIteratorFactory.createRowMajorWriteableIterator(renderedImage, (WritableRenderedImage)renderedImage);
}
/**
* {@inheritDoc }.
*/
@Override
protected void setPixelIterator(RenderedImage renderedImage, Rectangle subArea) {
pixIterator = PixelIteratorFactory.createRowMajorWriteableIterator(renderedImage, (WritableRenderedImage)renderedImage, subArea);
}
/**
* {@inheritDoc }.
*/
@Override
protected void setPixelIterator(RenderedImage renderedImage, WritableRenderedImage writableRI, Rectangle subArea) {
pixIterator = PixelIteratorFactory.createRowMajorWriteableIterator(renderedImage, writableRI, subArea);
}
/**
* {@inheritDoc }.
*/
@Override
protected PixelIterator getWritableRIIterator(RenderedImage renderedImage, WritableRenderedImage writableRenderedImage) {
return PixelIteratorFactory.createRowMajorWriteableIterator(renderedImage, writableRenderedImage);
}
/**
* {@inheritDoc }.
*/
@Override
protected PixelIterator getWritableRIIterator(RenderedImage renderedImage, WritableRenderedImage writableRenderedImage, Rectangle subarea) {
return PixelIteratorFactory.createRowMajorWriteableIterator(renderedImage, writableRenderedImage);
}
/**
* Fill reference test array with appropriate value from test.
*/
@Override
protected void fillGoodTabRef(int minx, int miny, int width, int height,
int tilesWidth, int tilesHeight, int numBand, Rectangle areaIterate) {
final int depy = Math.max(miny, areaIterate.y);
final int depx = Math.max(minx, areaIterate.x);
final int endy = Math.min(miny+height, areaIterate.y+areaIterate.height);
final int endx = Math.min(minx+width, areaIterate.x+areaIterate.width);
for(int y = depy; y<endy; y++){
for(int x = depx; x<endx; x++){
for(int b = 0; b<numBand; b++){
setTabRefValue(b + numBand*(x-minx+(y-miny)*width), -1);
}
}
}
}
/**
* {@inheritDoc }.
*/
@Override
protected void setRenderedImgTest(int minx, int miny, int width, int height, int tilesWidth, int tilesHeight, int numBand, Rectangle areaIterate) {
RowMajorReadTest.setRenderedImgTest(this, minx, miny, width, height, tilesWidth, tilesHeight, numBand, areaIterate);
}
/**
* Test if iterator transverse all raster positions with different minX and maxY coordinates.
* Also test rewind function.
*/
@Test
public void transversingAllWriteTest() {
final int dataType = getDataBufferType();
double valueRef;
switch (dataType) {
case DataBuffer.TYPE_FLOAT : valueRef = -2000.5;break;
default : valueRef = 0;break;
}
minx = 0;
miny = 0;
width = 100;
height = 50;
tilesWidth = 10;
tilesHeight = 5;
numBand = 3;
final int[] bandOffset = new int[numBand];
for (int i = 0;i<numBand; i++) {
bandOffset[i] = i;
}
final SampleModel sampleM = new PixelInterleavedSampleModel(dataType, tilesWidth, tilesHeight, numBand, tilesWidth*numBand, bandOffset);
renderedImage = new TiledImage(minx, miny, width, height, minx+tilesWidth, miny+tilesHeight, sampleM, null);
setPixelIterator(renderedImage);
final int length = width*height*numBand;
createTable(length);
double comp = valueRef;
int compteur = 0;
while (pixIterator.next()) {
pixIterator.setSampleDouble(comp);
setTabRefValue(compteur++, comp++);
}
pixIterator.rewind();
compteur = 0;
while (pixIterator.next()) {
setTabTestValue(compteur++, pixIterator.getSampleDouble());
}
assertTrue(compareTab());
minx = 1;
miny = -50;
width = 100;
height = 50;
tilesWidth = 10;
tilesHeight = 5;
renderedImage = new TiledImage(minx, miny, width, height, minx+tilesWidth, miny+tilesHeight, sampleM, null);
setPixelIterator(renderedImage);
compteur = 0;
comp = valueRef;
while (pixIterator.next()) {
pixIterator.setSampleDouble(comp);
setTabRefValue(compteur++, comp++);
}
comp = 0;
compteur = 0;
pixIterator.rewind();
while (pixIterator.next()) {
setTabTestValue(compteur++, pixIterator.getSampleDouble());
}
assertTrue(compareTab());
////////////Test rewind//////////////
pixIterator.rewind();
while (pixIterator.next()) {
pixIterator.setSampleDouble(comp);
setTabRefValue(length-compteur--, comp--);
}
pixIterator.rewind();
compteur = 0;
while (pixIterator.next()) {
setTabTestValue(compteur++, pixIterator.getSampleDouble());
}
assertTrue(compareTab());
}
}