public BufferedImage filter(BufferedImage src, BufferedImage dst)
public final BufferedImage filter(BufferedImage src, BufferedImage dst)
  public BufferedImage filter(BufferedImage src, BufferedImage dst)  {    // TODO Make sure premultiplied alpha is handled correctly.    // TODO See that color conversion is handled.    // TODO figure out how to use rendering hints.    if (scale.length != offsets.length)      throw new IllegalArgumentException();    ColorModel scm = src.getColorModel();    if (dst == null) dst = createCompatibleDestImage(src, null);    WritableRaster wsrc = src.getRaster();    WritableRaster wdst = dst.getRaster();        // Share constant across colors except alpha    if (scale.length == 1 || scale.length == scm.getNumColorComponents())      {	// Construct a raster that doesn't include an alpha band.	int[] subbands = new int[scm.getNumColorComponents()];	for (int i=0; i < subbands.length; i++) subbands[i] = i;	wsrc = 	  wsrc.createWritableChild(wsrc.minX, wsrc.minY, wsrc.width, wsrc.height,				   wsrc.minX, wsrc.minY, subbands);      }    // else all color bands    filter(wsrc, wdst);    return dst;  }