if speed doesn't matter i'd opt for the most silly solution: simply swap the colors manually.
you can get all the pixel values with BufferedImage.getRGB(...). then check if the color is on your list and replace it accordingly. later you can use setRGB to save the new color.
here's an example:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import javax.imageio.ImageIO;
public class Equ{
public static void main(String[] args) throws IOException {
BufferedImage img = new BufferedImage( 20, 20, BufferedImage.TYPE_INT_ARGB );
Graphics2D g = img.createGraphics();
g.setColor( Color.white );
g.fillRect( 0, 0, 20, 20 );
g.setColor( Color.black );
g.fillRect( 5, 5, 10, 10 );
Color[] mapping = new Color[]{
Color.black, Color.white, // replace black with white
Color.white, Color.green // and white with green
};
ImageIO.write( img, "png", new File( "original.png" ) );
swapColors( img, mapping );
ImageIO.write( img, "png", new File( "swapped.png" ) );
}
public static void swapColors( BufferedImage img, Color ... mapping ){
int[] pixels = img.getRGB( 0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth() );
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for( int i = 0; i < mapping.length/2; i++ ){
map.put( mapping[2*i].getRGB(), mapping[2*i+1].getRGB() );
}
for( int i = 0; i < pixels.length; i++ ){
if( map.containsKey( pixels[i] ) )
pixels[i] = map.get( pixels[i] );
}
img.setRGB( 0, 0, img.getWidth(), img.getHeight(), pixels, 0, img.getWidth() );
}
}