Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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;
/* 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 aade 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 = escala(Valor_Zoom) ); valEscalaY = 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(); } (int) (FOTO_tmp.getHeight(this) * (int) (FOTO_tmp.getWidth(this) *
public void Disminuir(int Valor_Zoom){ valEscalaX = escala(Valor_Zoom) ); valEscalaY = escala(Valor_Zoom) ); (int) (FOTO_tmp.getHeight(this) * (int) (FOTO_tmp.getWidth(this) *
this.setSize(FOTO_tmp.getWidth(this),FOTO_tmp.getHeight(this) ); } } Explicacin: Esta clase al ser creada, necesita como parametro de entrada, un objeto BufferesImage, el jpanel toma el tamao 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 = valEscalaY =
/* se aade 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. Video Enlace de descarga