/* * @(#)MaskFilter.java * * Copyright 2002-2003 JIDE Software Inc. All rights reserved. */ package com.jidesoft.icons; import java.awt.*; import java.awt.image.FilteredImageSource; import java.awt.image.ImageProducer; import java.awt.image.RGBImageFilter; /** * An image filter that replaces one color in an image with another color. */ public class MaskFilter extends RGBImageFilter { private Color _newColor; private Color _oldColor; private static MaskFilter _maskFilter = null; public static MaskFilter getInstance(Color oldColor, Color newColor) { if (_maskFilter == null) { _maskFilter = new MaskFilter(oldColor, newColor); } else { _maskFilter.setOldColor(oldColor); _maskFilter.setNewColor(newColor); } return _maskFilter; } private void setNewColor(Color newColor) { _newColor = newColor; } private void setOldColor(Color oldColor) { _oldColor = oldColor; } /** * Creates an image from an existing one by replacing the old color with the new color. */ public static Image createImage(Image i, Color oldColor, Color newColor) { MaskFilter filter = MaskFilter.getInstance(oldColor, newColor); ImageProducer prod = new FilteredImageSource(i.getSource(), filter); Image image = Toolkit.getDefaultToolkit().createImage(prod); return image; } /** * Creates an image as negative of an existing one. It will basically replace the black color with white color. */ public static Image createNegativeImage(Image i) { return createImage(i, Color.black, Color.white); } /** * Constructs a MaskFilter object that filters color of image to another color Please note, you can also use {@link * #getInstance(java.awt.Color, java.awt.Color)} to reuse the same instance of MaskFilter. * * @param oldColor old color in exist image that needs to be replaced by new color * @param newColor new color to replace the old color */ public MaskFilter(Color oldColor, Color newColor) { _newColor = newColor; _oldColor = oldColor; canFilterIndexColorModel = true; } /** * Overrides <code>RGBImageFilter.filterRGB</code>. */ @Override public int filterRGB(int x, int y, int rgb) { if (_newColor != null && _oldColor != null) { if (rgb == _oldColor.getRGB()) { return _newColor.getRGB(); } } return rgb; } }