package zutil.image;

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

/**
 * This is a static class containing image utilities
 * 
 * @author Ziver
 */
public class ImageUtil {

	/**
	 * Resizes an BufferedImage
	 * 
	 * @param source is the image to resize
	 * @param width is the wanted width
	 * @param height is the wanted height
	 * @param keep_aspect is if the aspect ratio of the image should be kept
	 * @return the resized image
	 */
	public static BufferedImage scale(BufferedImage source, int width, int height, boolean keep_aspect){
		double scale_width = (double)width / source.getWidth();
		double scale_height = (double)height / source.getHeight();

		// aspect calculation
		if(keep_aspect){
			if(scale_width * source.getHeight() > height){
				scale_width = scale_height;
			}else{
				scale_height = scale_width;
			}
		}


		BufferedImage tmp = new BufferedImage(
				(int)(scale_width * source.getWidth()), 
				(int)(scale_height * source.getHeight()), 
				BufferedImage.TYPE_INT_RGB);
		Graphics2D g2d = tmp.createGraphics();

		AffineTransform at = AffineTransform.getScaleInstance(scale_width, scale_height);
		g2d.drawRenderedImage(source, at);
		g2d.dispose();
		return tmp;
	}
}
