Está en la página 1de 5

Escalar imagen en java Posted 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 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.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) ); } } 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 =

FOTO.Ancho * Valor_Zoom/100 FOTO.Alto * Valor_Zoom/100

/* 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

También podría gustarte