package org.geotools.renderer.lite;
import static org.junit.Assert.assertEquals;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridCoverageFactory;
import org.geotools.data.property.PropertyDataStore;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.DefaultMapContext;
import org.geotools.map.FeatureLayer;
import org.geotools.map.GridCoverageLayer;
import org.geotools.map.MapContext;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.geotools.styling.Style;
import org.geotools.styling.StyleBuilder;
import org.geotools.test.TestData;
import org.junit.Test;
public class MultiLayerTest {
@Test
public void testRasterOpacity() throws Exception {
// a polygon layer
File property = new File(TestData.getResource(this, "buildings.properties").toURI());
PropertyDataStore ds = new PropertyDataStore(property.getParentFile());
SimpleFeatureSource fs = ds.getFeatureSource("buildings");
ReferencedEnvelope bounds = new ReferencedEnvelope(0, 10, 0, 10, DefaultGeographicCRS.WGS84);
StyleBuilder sb = new StyleBuilder();
Style pst = sb.createStyle(sb.createPolygonSymbolizer(null, sb.createFill(Color.GRAY, 0.5)));
// a raster layer
BufferedImage bi = new BufferedImage(300, 300, BufferedImage.TYPE_4BYTE_ABGR);
Graphics g = bi.getGraphics();
g.setColor(Color.RED);
g.fillRect(0, 0, 300, 300);
g.dispose();
GridCoverage2D coverage = new GridCoverageFactory().create("test_red", bi, bounds);
Style rst = sb.createStyle(sb.createRasterSymbolizer());
MapContext mc = new DefaultMapContext();
mc.addLayer(new FeatureLayer(fs, pst));
mc.addLayer(new GridCoverageLayer(coverage, rst));
StreamingRenderer renderer = new StreamingRenderer();
renderer.setContext(mc);
BufferedImage img = RendererBaseTest.renderImage(renderer, bounds, null);
// check the red image fully covered the vector (GEOT-3812)
int[] pixel = new int[4];
img.getData().getPixel(100, 100, pixel);
assertEquals(255, pixel[0]);
assertEquals(0, pixel[1]);
assertEquals(0, pixel[2]);
assertEquals(255, pixel[3]);
}
}