package com.buttware.eu3view; import editor.MapPanel; import editor.mapmode.MapMode; import eug.specific.eu3.EU3SaveGame; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; public class Render { private static final int YEARPOSX = 10; private static final int YEARPOSY = 10; public static void render(EU3SaveGame save, int startYear, int endYear, int interval, int delay, boolean showBorders, String renderTo, MapMode m, double scale, boolean showDate) throws Exception { MapPanel mp = new MapPanel(); mp.initialize(); mp.setDataSource(save); m.setMapPanel(mp); mp.setMode(m); mp.setPaintBorders(showBorders); Dimension d = mp.getPreferredSize(); mp.setSize(d); BufferedImage unfiltered = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_RGB); BufferedImage filtered = new BufferedImage((int)(d.width * scale), (int)(d.height * scale), BufferedImage.TYPE_INT_RGB); AffineTransform t = new AffineTransform(); t.scale(scale, scale); Graphics2D gUnfiltered = unfiltered.createGraphics(); Graphics2D gFiltered = filtered.createGraphics(); gFiltered.setColor(Color.WHITE); AnimatedGifEncoder gifenc = new AnimatedGifEncoder(); gifenc.start(renderTo); gifenc.setDelay(delay); gifenc.setRepeat(0); gifenc.setQuality(1); for(int i = startYear; i <= endYear; i+= interval) { mp.getModel().setDate(i + ".1.1"); mp.repaint(); mp.paint(gUnfiltered); gFiltered.drawImage(unfiltered, t, null); if(showDate) { gFiltered.drawString(String.valueOf(i), YEARPOSX, (int)(d.height * scale) - YEARPOSY); } gifenc.addFrame(filtered); } //add last frame, with big delay mp.getModel().setDate(endYear + ".12.12"); mp.repaint(); mp.paint(gUnfiltered); gFiltered.drawImage(unfiltered, t, null); if(showDate) { gFiltered.drawString(String.valueOf(endYear), YEARPOSX, (int)(d.height * scale) - YEARPOSY); } gifenc.setDelay(delay * 20); gifenc.addFrame(filtered); gifenc.finish(); } }