Escalar Imagen en Java

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

Transcript of Escalar Imagen en Java

Page 1: 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 {

Page 2: Escalar Imagen en Java

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

Page 3: Escalar Imagen en Java

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();

Page 4: Escalar Imagen en Java

}

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.

Page 5: Escalar Imagen en Java

Video

Enlace de descarga