first i have my editor, i can choose a color and an object and then by clicking there it should be the object with the right color, without making hundrets of pictures with each color for on object


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | import greenfoot.Actor; import greenfoot.GreenfootImage; import java.awt.Color; import java.awt.image.RGBImageFilter; import java.awt.image.BufferedImage; import java.awt.image.FilteredImageSource; import java.awt.Image; import java.awt.Toolkit; import java.awt.Graphics2D; /** * TestActor * * @author Taylor Born * @version March 2014 */ public class TestActor extends Actor { private static final int RGB_RED = - 65536 ; //Color.RED.getRGB(); private static final int RGB_BLUE = - 16776961 ; //Color.BLUE.getRGB(); public TestActor() { GreenfootImage image = new GreenfootImage( 500 , 500 ); image.setColor(Color.RED); image.fill(); setImage(image); } @Override public void act() { long startTime = System.currentTimeMillis(); BufferedImage image = getImage().getAwtImage(); RGBImageFilter colorfilter = new RedBlueSwapFilter(); FilteredImageSource filteredImageSource = new FilteredImageSource(image.getSource(), colorfilter); Image filteredImage = Toolkit.getDefaultToolkit().createImage(filteredImageSource); Graphics2D g = image.createGraphics(); g.drawImage(filteredImage, 0 , 0 , null ); g.dispose(); long midTime = System.currentTimeMillis(); System.out.println( "Time to convert using RGBImageFilter: " + (midTime - startTime) / 1000d + "seconds." ); for ( int y = 0 ; y < image.getHeight(); y++) for ( int x = 0 ; x < image.getWidth(); x++) switch (image.getRGB(x, y)) { case RGB_RED: image.setRGB(x, y, RGB_BLUE); break ; case RGB_BLUE: image.setRGB(x, y, RGB_RED); } long endTime = System.currentTimeMillis(); System.out.println( "Time to convert using standard loops and setRGB: " + (endTime - midTime) / 1000d + "seconds." ); } private static class RedBlueSwapFilter extends RGBImageFilter { public RedBlueSwapFilter() { // The filter's operation does not depend on the // pixel's location, so IndexColorModels can be // filtered directly. canFilterIndexColorModel = true ; } @Override public int filterRGB( int x, int y, int rgb) { switch (rgb) { case RGB_RED: return RGB_BLUE; case RGB_BLUE: return RGB_RED; default : return rgb; } } } } |
1 | midTime = System.currentTimeMillis(); |