code: public T next() {
  		if( loop ) {
  			if( forwards ) {
  				if( index >= fileNames.size() ) {
  					index = fileNames.size()-1;
  					forwards = false;
  				}
  			} else {
  				if( index < 0 ) {
  					index = 0;
  					forwards = true;
  				}
  			}
  		}
  
  		if( forwards )
  			imageGUI = UtilImageIO.loadImage(fileNames.get(index++));
  		else
  			imageGUI = UtilImageIO.loadImage(fileNames.get(index--));
  
  		if( imageGUI == null )
  			return null;
  
  		image = type.createImage(imageGUI.getWidth(),imageGUI.getHeight());
  		ConvertBufferedImage.convertFrom(imageGUI, image,true);
  
  		// no changes needed so return the original
  		if (scalefactor == 1)
  			return image;
  
  		// scale down the image
  		int width = image.getWidth() / scalefactor;
  		int height = image.getHeight() / scalefactor;
  
  		if (scaled == null || scaled.getWidth() != width || scaled.getHeight() != height) {
  			scaled = new BufferedImage(width, height, imageGUI.getType());
  		}
  		Graphics2D g2 = scaled.createGraphics();
  
  		AffineTransform affine = new AffineTransform();
  		affine.setToScale(1.0 / scalefactor, 1.0 / scalefactor);
  
  		g2.drawImage(imageGUI, affine, null);
  		imageGUI = scaled;
  
  		return image;
  	}
docs: Loads the next image into a BufferedImage and returns it. The same instance
  or a new instance of a BufferedImage might be returned each time.  Don't rely
  on either behavior being consistent.
  
  @return A BufferedImage containing the next image.