Example #1
0
  /* (non-Javadoc)
   * @see java.awt.image.BufferedImageOp#filter(java.awt.image.BufferedImage, java.awt.image.BufferedImage)
   */
  public BufferedImage filter(BufferedImage src, BufferedImage dst) {
    if (src == null) {
      throw new NullPointerException("src image is null");
    }
    if (src == dst) {
      throw new IllegalArgumentException("src image cannot be the " + "same as the dst image");
    }

    boolean needToConvert = false;
    ColorModel srcCM = src.getColorModel();
    ColorModel dstCM;
    BufferedImage origDst = dst;

    if (srcCM instanceof IndexColorModel) {
      IndexColorModel icm = (IndexColorModel) srcCM;
      src = icm.convertToIntDiscrete(src.getRaster(), false);
      srcCM = src.getColorModel();
    }
    if (dst == null) {
      dst = createCompatibleDestImage(src, null);
      dstCM = srcCM;
      origDst = dst;
    } else {
      dstCM = dst.getColorModel();
      if (srcCM.getColorSpace().getType() != dstCM.getColorSpace().getType()) {
        needToConvert = true;
        dst = createCompatibleDestImage(src, null);
        dstCM = dst.getColorModel();
      } else if (dstCM instanceof IndexColorModel) {
        dst = createCompatibleDestImage(src, null);
        dstCM = dst.getColorModel();
      }
    }

    java.awt.image.CropImageFilter cropfilter =
        new java.awt.image.CropImageFilter(region.x, region.y, region.width, region.height);
    Image returnImage =
        Toolkit.getDefaultToolkit()
            .createImage(new java.awt.image.FilteredImageSource(src.getSource(), cropfilter));
    dst = ImageConverter.convertImage(returnImage);
    origDst = dst;

    if (needToConvert) {
      ColorConvertOp ccop = new ColorConvertOp(hints);
      ccop.filter(dst, origDst);
    } else if (origDst != dst) {
      java.awt.Graphics2D g2 = origDst.createGraphics();
      try {
        g2.drawImage(dst, 0, 0, null);
      } finally {
        g2.dispose();
      }
    }

    return origDst;
  }