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 https://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.
Video
Enlace de descarga
El laberinto del terror es un juego en el que haciendo uso del ratón y de tu pulso de borracho debes cruzar distintos la[...]
En posts anteriores hablamos sobre los metadatos y el porque son importantes en la Seguridad Informática, vimos el manej[...]
En este post veremos como imprimir secciones de un formulario en java implementando la Interface Printable. La clase que[...]
En este tutorial veremos la forma de conectarse a una base de datos de Firebird utilizando el lenguaje Java y el IDE Net[...]
Acierta los colores o Adivina los colores es un sencillo juego que consiste en que dado 6 colores «rojo», «verde», «salm[...]
PlaceHolder: PlaceHolder es un atributo propio de HTML5 y es el texto que aparece dentro de un campo de texto (un JTextF[...]