package es.geograma.render; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Component; import java.awt.Composite; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsEnvironment; import java.awt.Image; import java.awt.Panel; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import java.awt.image.ImageProducer; import java.awt.image.RGBImageFilter; import java.awt.image.RenderedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import javax.imageio.ImageIO; import org.apache.log4j.Logger; import es.prodevelop.gvsig.mobile.fmap.MapContext; import es.prodevelop.gvsig.mobile.fmap.driver.FMapDriverException; import es.prodevelop.gvsig.mobile.fmap.driver.raster.ecw.EcwReader; import es.prodevelop.gvsig.mobile.fmap.layer.FLayer; import es.prodevelop.gvsig.mobile.fmap.util.Defaults; import es.prodevelop.gvsig.mobile.fmap.util.ResourceReader; import es.prodevelop.gvsig.mobile.fmap.util.Utils; import es.prodevelop.gvsig.mobile.fmap.util.cancel.Cancellable; import es.prodevelop.gvsig.mobile.fmap.viewport.ViewPort; import es.prodevelop.gvsig.mobile.gui.canvas.MapControl; public class Render { private Graphics2D g = null; private ViewPort vp = null; public static Logger logger = Logger.getLogger(Render.class); private ArrayList imageLayers = new ArrayList(); private int numLayersPainted = 0; private int indices[] = null; private MapControl mapControl = null; //private Image imageLayer = null; public Render(Graphics2D g,ViewPort vp,MapControl mapControl) { this.g = g; this.vp = vp; this.mapControl = mapControl; // imageLayer = ResourceReader.getResourceImage(ResourceReader.IMG_SKIN_PATH, "transparencia.png"); } public void draw(FLayer layer) { try { layer.draw(this.g, this.vp); }catch(FMapDriverException e) { logger.error("While drawing layer: " + layer.getName()); logger.error("Error message: " + e.getMessage()); } } public void draw(FLayer layers[],Cancellable canc) { int size = layers.length; indices = new int[size]; for (int i = 0; i < size; i++) { FLayer lyr = layers[i]; indices[i] = 0; if (canc.isCanceled()) { return; } // Creamos una imagen vacía //Image imageLyr = Utils.createBufferedImage(this.g.getClipBounds().width,this.g.getClipBounds().height); BufferedImage imageLyr = Utils.createBufferedImage(this.g.getClipBounds().width,this.g.getClipBounds().height); /* Rectangle rectangle = new Rectangle(0, 0,this.g.getClipBounds().width, this.g.getClipBounds().height); BufferedImage imageLyr = null; */ try{ //Robot robot = new Robot(); //imageLyr = robot.createScreenCapture(rectangle); // La rellenamos con el color qeu posteriormente vamos a poner como transparente Graphics2D gg =(Graphics2D) imageLyr.getGraphics(); gg.drawImage(mapControl.imageLayerTransparent, 0, 0, null); // La añadimos a la cola imageLayers.add(imageLyr); LayerThread layerThread = new LayerThread(this,lyr,i,(Graphics2D)gg,vp); layerThread.start(); }catch(Exception ops) { } } // Esperamos 30 segundos como mucho /* long t1 = System.currentTimeMillis(); while (numLayersPainted30) { forzeUpdate(); break; } } */ } private AlphaComposite makeComposite(float alpha) { int type = AlphaComposite.SRC_OVER; return(AlphaComposite.getInstance(type, alpha)); } public void update(int order) { indices[order] = 1; numLayersPainted += 1; for(int i=0;i