
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

/**
 *Clase que permite manipular imagenes 
 * -carga, guarda, escala-
 * @author Daniel Velasquez, Victor Elizondo
 */
public class Picture {
	
	//en "img" contendrá una copia de la imagen original
	private BufferedImage img = null;
	
	
	/**
    *Constructor que le entrega una imagen al miembro de la clase
    * @param image_rute  archivo que contiene la imagen en su formato original
    */   
	public Picture(File image_rute) {
	       try {
	           img = ImageIO.read(image_rute);
	       } catch (IOException e) {
	       }

	    }
	

	/**
    *graba la imagen miembro en el disco duro
    * @param image_saving_rute  String con la ruta donde se debe escribir la imagen
	* @param formato  String con la extensión de la foto original, para no ser esta cambiada
    */ 
	public void SaveImage(String image_saving_rute, String formato){
		
		File rute = new File(image_saving_rute);
		try {
			ImageIO.write(img, formato, rute);
		} catch (IOException e) {
			
		}	
	}
	

	/**
    *Escala una imagen en porcentaje.
	*Ejemplo: factorEscala=0.6 (escala la imagen al 60%)
    * @param factorEscala  factor con que se deberá escalar
    */ 
	public void Escalar(final double factorEscala) {
		
		//algoritmos de escalamiento:
	     int nearest_neighbor = 1;
	     int bilinear         = 2;
	     int bicubic          = 3;
         
		// Comprobacion de parametros
		if (img == null) {
			return;
		}
 
		// Compruebo escala nula
		if (factorEscala == 1 ) {
			return;
		}
 
		// La creo con opciones
		AffineTransformOp op = new AffineTransformOp(
				AffineTransform.getScaleInstance(factorEscala, factorEscala), 1);
 
		// filtro sobre el primer argumento, resultado en el segundo argumento y en el retorno:
		 img = op.filter(img, null);
	}

}
