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
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;
}
}
}
}midTime = System.currentTimeMillis();