Escalar Imagen en Java
-
Upload
pedro-ruiz -
Category
Documents
-
view
26 -
download
0
Transcript of Escalar Imagen en Java
Escalar imagen en javaPosted by Mouse on jul 04, 2011 | Dejar un comentario
Esta aplicacion permite escalar
una imagen desde java sin perder las proporciones de la misma, utiliza
SCALE_AREA_AVERAGING
El codigo de la clase se llama Zoom.java, y es una extension de un JPanel:
package jcimagezoom;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
/**
* @web http://www.jc-mouse.net
* @author Mouse
*/
public class Zoom extends JPanel {
private Image FOTO_ORIGINAL;
private Image FOTO_tmp;
private BufferedImage Imagen_en_memoria;
private Graphics2D g2D;
private boolean con_foto = false;
private int valEscalaX=0;
private int valEscalaY=0;
/* al crear el objeto se crea con una imagen pasada como parametro*/
public Zoom(BufferedImage f){
this.FOTO_ORIGINAL = f;
this.FOTO_tmp = f;
this.setSize(f.getWidth(),f.getHeight());
this.setVisible(true);
this.con_foto=true;
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
if(this.con_foto){
Imagen_en_memoria = new BufferedImage(this.getWidth(),
this.getHeight(), BufferedImage.TYPE_INT_RGB);
g2D = Imagen_en_memoria.createGraphics();
g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
//se añade la foto
g2D.drawImage(FOTO_tmp,0, 0, FOTO_tmp.getWidth(this),
FOTO_tmp.getHeight(this), this);
g2.drawImage(Imagen_en_memoria, 0, 0, this);
}
}
public void Aumentar(int Valor_Zoom){
//se calcula el incremento
valEscalaX = (int) (FOTO_tmp.getWidth(this) *
escala(Valor_Zoom) );
valEscalaY = (int) (FOTO_tmp.getHeight(this) * escala(Valor_Zoom)
);
//se escala la imagen sumado el nuevo incremento
this.FOTO_tmp = FOTO_tmp.getScaledInstance((int)
(FOTO_tmp.getWidth(this) + valEscalaX), (int)
(FOTO_tmp.getHeight(this) + valEscalaY),
Image.SCALE_AREA_AVERAGING);
resize();
}
public void Disminuir(int Valor_Zoom){
valEscalaX = (int) (FOTO_tmp.getWidth(this) *
escala(Valor_Zoom) );
valEscalaY = (int) (FOTO_tmp.getHeight(this) * escala(Valor_Zoom)
);
this.FOTO_tmp = FOTO_tmp.getScaledInstance((int)
(FOTO_tmp.getWidth(this) - valEscalaX), (int) (FOTO_tmp.getHeight(this)
- valEscalaY), Image.SCALE_AREA_AVERAGING);
resize();
}
private float escala(int v){
return v/100f;
}
public void Restaurar(){
this.FOTO_tmp = this.FOTO_ORIGINAL;
resize();
}
private void resize(){
this.setSize(FOTO_tmp.getWidth(this),FOTO_tmp.getHeight(this));
}
}
Explicación: Esta clase al ser creada, necesita como parametro de entrada, un
objeto BufferesImage, el jpanel toma el tamaño de esta imagen y pinta el
contenido en su interior.
Incluye los metodos “Aumentar (int Valor_Zoom)” y “Disminuir(int Valor_Zoom)” los
cuales requieren un valor entero de entrada, estos metodos son los encargados de
llevar a cabo el escalado de la imagen en base a una simple formula:
/* se obtiene el valor a aumentar */
valEscalaX = FOTO.Ancho * Valor_Zoom/100
valEscalaY = FOTO.Alto * Valor_Zoom/100
/* se añade las nuevas dimensiones a la imagen */
FOTO.Ancho = FOTO.Ancho + valEscalaX
FOTO.Alto = FOTO.Alto + valEscalaX
Esta formula permite escalar la imagen sin deformar el ancho como el alto,
manteniendo correctas las proporciones de la mism.