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
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Si necesitamos mostrar gráficos estadísticos en nuestras aplicaciones android, contamos con muchas librerías disponibles...
Semanas atrás leí un articulo en el que se pensaba implementar los emojis como contraseñas en los dispositivos con andro...
En un post anterior conocimos una herramienta Open Source con un conjunto de herramientas para el trabajo con imágenes e...
En este post realizaremos una aplicación android que hará uso de la cámara del celular para tomar una foto y guardarla e...
Como se vio en un post anterior (Capturar video de una webcam con JMF) la captura de un video desde una webcam utilizand...
¿Quien no ha querido programar un juego? creo que la mayoría si no es que todos los que conocen de programación sin impo...
Los comentarios estan cerrados
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...
Bueno el material
Necesito ayuda, estoy tratando de hacerle zoom a un grafico en java netbeans me podria ayudar?
por que me dice que javazoom bno existe?