/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2015, 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.processing.image.dynamicrange;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.awt.image.WritableRaster;
import org.geotoolkit.process.ProcessDescriptor;
import org.geotoolkit.process.Process;
import org.geotoolkit.process.ProcessFinder;
import org.geotoolkit.image.BufferedImages;
import org.junit.Test;
import static org.junit.Assert.*;
import org.opengis.parameter.ParameterValueGroup;
/**
*
* @author Johann Sorel (Geomatys)
*/
public class DynamicRangeStretchTest extends org.geotoolkit.test.TestBase {
private static final double DELTA = 0.1;
@Test
public void stretchTest() throws Exception{
final BufferedImage inputImage = BufferedImages.createImage(1, 6, 2, DataBuffer.TYPE_DOUBLE);
final WritableRaster inputRaster = inputImage.getRaster();
inputRaster.setPixel(0, 0, new double[]{-9,-5});
inputRaster.setPixel(0, 1, new double[]{10, 0});
inputRaster.setPixel(0, 2, new double[]{20,10});
inputRaster.setPixel(0, 3, new double[]{28,41});
inputRaster.setPixel(0, 4, new double[]{12,8});
inputRaster.setPixel(0, 5, new double[]{Double.NaN,Double.NaN});
final ProcessDescriptor desc = ProcessFinder.getProcessDescriptor("image", "dynamicrangestretch");
assertNotNull(desc);
final ParameterValueGroup params = desc.getInputDescriptor().createValue();
params.parameter("image").setValue(inputImage);
//R G B A
params.parameter("bands").setValue(new int[]{-1, 0, 1,-1});
params.parameter("ranges").setValue(new double[][]{{},{10,20},{0,10},{}});
final Process process = desc.createProcess(params);
final ParameterValueGroup result = process.call();
//check result image
final RenderedImage outImage = (RenderedImage) result.parameter("result").getValue();
assertEquals(inputImage.getWidth(), outImage.getWidth());
assertEquals(inputImage.getHeight(), outImage.getHeight());
//check values
final double[] pixel = new double[4];
final Raster outRaster = outImage.getData();
// R G B A
assertArrayEquals(new double[]{0, 0, 0,255}, outRaster.getPixel(0, 0, pixel), DELTA);
assertArrayEquals(new double[]{0, 0, 0,255}, outRaster.getPixel(0, 1, pixel), DELTA);
assertArrayEquals(new double[]{0,255,255,255}, outRaster.getPixel(0, 2, pixel), DELTA);
assertArrayEquals(new double[]{0,255,255,255}, outRaster.getPixel(0, 3, pixel), DELTA);
assertArrayEquals(new double[]{0, 51,204,255}, outRaster.getPixel(0, 4, pixel), DELTA);
assertArrayEquals(new double[]{0, 0, 0, 0}, outRaster.getPixel(0, 5, pixel), DELTA);
}
}