Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Escalar imagen en java

Escalar imagen en java

Autor jc mouse lunes, julio 4, 2011

Escalado de imagenesEsta 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

Click para descargar

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

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! :)

También Te Podría Interesar

Contar segundos (Problema Resuelto)

Contar segundos (Problema Resuelto)

El problema dice asi: Se desea contar los segundos que se presiona un JButton en un formulario. Solución: Para resolver...

Juego: Acierta los colores (Código Fuente)

Juego: Acierta los colores (Código Fuente)

Acierta los colores o Adivina los colores es un sencillo juego que consiste en que dado 6 colores «rojo», «verde», «salm...

JSCRUM .:. Gestor de Proyectos

JSCRUM .:. Gestor de Proyectos

¿Qué es SCRUM? SCRUM es un modelo de referencia que define un conjunto de prácticas y roles, y que puede tomarse como pu...

Multiplicación de matrices

Multiplicación de matrices

En matemática, la multiplicación o producto de matrices es la operación de composición efectuada entre dos matrices, o b...

Ejemplo práctico de MVC java Swing con Netbeans

Ejemplo práctico de MVC java Swing con Netbeans

Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la inter...

Extraer texto e imagen, exportar como PNG y encriptar un archivo PDF

Extraer texto e imagen, exportar como PNG y encriptar un archivo PDF

En este post hablaremos sobre la biblioteca de Apache PDFBox el cual es una herramienta para java de código abierto que...

3 comentarios en “Escalar imagen en java”

  1. NICANOR dice:

    Bueno el material

  2. Ivy Mae dice:

    Necesito ayuda, estoy tratando de hacerle zoom a un grafico en java netbeans me podria ayudar?

  3. mauricio dice:

    por que me dice que javazoom bno existe?

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Quasar es un proyecto Open Source basado en el Framework Vue que nos permite desarrollar proyectos de todo tipo, por eje...

Continuando el post de «Introducción a Retrofit» donde realizamos una breve preparación a lo que es el uso de la librerí...

Editar un documento PDF no es tan sencillo como editar un archivo de texto por ejemplo, para editar archivos PDFs necesi...

¿Alguna vez tuviste la necesidad de hacer una captura de pantalla de una página web? Si es así, seguramente buscaste y d...

Herramientas

Generador de Enlaces a Whatsapp