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 (actualizado 04/01/2026)
https://zion.jc-mouse.net/file/ZOOMJATA65
Enjoy!!!
Tenia un problema, me pasaron unos archivos excel con unos cientos de registros (ver imagen más abajo) que exportaron de[...]
Android hace uso de la base de datos SQLite para el manejo de registros en las aplicaciones. Según Santa Wikipedia defin[...]
Cuando nos bajamos un proyecto de internet o cuando nos pasan un código de otra pc (que técnicamente viene siendo lo mis[...]
La aplicación funciona gracias a la inteligencia artificial para generar las imagenes de Barbie & Ken, aunque se deb[...]
Para terminar el tutorial, debemos unir tanto la VISTA como el MODELO y para eso esta el CONTROLADOR. o.O El controlador[...]
Hola 🙂 en esta ocasión un amigo del Brasil nos envía un proyecto java de una Urna Electrónica o Voto Electronico, desarr[...]