code: @Override
      public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, 
              int sx1, int sy1, int sx2, int sy2, ImageObserver observer) {
          int w = dx2 - dx1;
          int h = dy2 - dy1;
          BufferedImage img2 = new BufferedImage(w, h, 
                  BufferedImage.TYPE_INT_ARGB);
          Graphics2D g2 = img2.createGraphics();
          g2.drawImage(img, 0, 0, w, h, sx1, sy1, sx2, sy2, null);
          return drawImage(img2, dx1, dy1, null);
      }
docs: Draws part of an image (defined by the source rectangle
  {@code (sx1, sy1, sx2, sy2)}) into the destination rectangle
  {@code (dx1, dy1, dx2, dy2)}.  Note that the {@code observer} is ignored.
  
  @param img  the image.
  @param dx1  the x-coordinate for the top left of the destination.
  @param dy1  the y-coordinate for the top left of the destination.
  @param dx2  the x-coordinate for the bottom right of the destination.
  @param dy2  the y-coordinate for the bottom right of the destination.
  @param sx1 the x-coordinate for the top left of the source.
  @param sy1 the y-coordinate for the top left of the source.
  @param sx2 the x-coordinate for the bottom right of the source.
  @param sy2 the y-coordinate for the bottom right of the source.
  
  @return {@code true} if the image is drawn.