Java BufferedImage Resize resizeToContainer(BufferedImage imagen, int wCont, int hCont)

Here you can find the source of resizeToContainer(BufferedImage imagen, int wCont, int hCont)

Description

Redimensiona una imagen para ajustarla a un contenedor

License

Open Source License

Parameter

Parameter Description
bufferedImage la imagen que se desea redimensionar
newW el nuevo ancho que se desea redimensionar
newH el nuevo alto que se desea redimensionar

Return

BufferedImage redimensionada

Declaration

public static BufferedImage resizeToContainer(BufferedImage imagen, int wCont, int hCont) 

Method Source Code


//package com.java2s;
//License from project: Open Source License 

import java.awt.*;

import java.awt.geom.AffineTransform;
import java.awt.image.*;

import javax.swing.*;

public class Main {
    private static int widthImage;
    private static int heightImage;

    /**// ww  w  .  j a va 2s . c om
     * Redimensiona una imagen para ajustarla a un contenedor
     *
     * @param bufferedImage la imagen que se desea redimensionar
     * @param newW el nuevo ancho que se desea redimensionar
     * @param newH el nuevo alto que se desea redimensionar
     *
     * @return BufferedImage redimensionada
     */
    public static BufferedImage resizeToContainer(BufferedImage imagen, int wCont, int hCont) {
        widthImage = new ImageIcon(imagen).getIconWidth();
        heightImage = new ImageIcon(imagen).getIconHeight();
        double scaleW, scaleH; // escala por defecto 1:1

        // Escalado de la imagen
        if (widthImage > wCont && heightImage > hCont) {
            scaleH = (hCont * 1.0) / heightImage;
            scaleW = scaleH;
            imagen = getScaledImage(imagen, scaleW, scaleH);
            setImageDimension(imagen);
        }

        if (widthImage >= wCont && heightImage <= hCont) {
            scaleW = (wCont * 1.0) / widthImage;
            scaleH = scaleW;
            imagen = getScaledImage(imagen, scaleW, scaleH);
            setImageDimension(imagen);
        }

        if (widthImage <= wCont && heightImage >= hCont) {
            scaleH = (hCont * 1.0) / heightImage;
            scaleW = scaleH;
            imagen = getScaledImage(imagen, scaleW, scaleH);
            setImageDimension(imagen);
        }

        return imagen;
    }

    /**
     * Obtiene una imagen escalada
     */
    public static BufferedImage getScaledImage(Image imagen, double scaleW, double scaleH) {

        BufferedImage bi = toBufferedImage(imagen);

        int w = (int) (bi.getWidth() * scaleW);
        int h = (int) (bi.getHeight() * scaleH);

        bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

        Graphics2D g2 = bi.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
                RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);

        AffineTransform at = AffineTransform.getScaleInstance(scaleW, scaleH);
        g2.drawRenderedImage(toBufferedImage(imagen), at);
        g2.dispose();
        return bi;
    }

    /**
     * Establece las dimensiones de una imagen
     *
     * @param imagen
     */
    private static void setImageDimension(Image imagen) {
        widthImage = new ImageIcon(imagen).getIconWidth();
        heightImage = new ImageIcon(imagen).getIconHeight();
    }

    /**
     * Convierte un objeto Image a un BufferedImage
     *
     * @param img El objeto Image a convertir
     * @return El BufferedImage obtenido
     */
    public static BufferedImage toBufferedImage(Image img) {
        if (img instanceof BufferedImage) {
            return (BufferedImage) img;
        }
        // Crea un buffered image con trasparencia
        BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null),
                BufferedImage.TYPE_INT_ARGB);
        // Dibuja la imagen en el buffered image
        Graphics2D bGr = bimage.createGraphics();
        bGr.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        bGr.drawImage(img, 0, 0, null);
        bGr.dispose();
        // Retorna el buffered image
        return bimage;
    }

    /**
     * Obtiene el ancho de una Image
     */
    public static int getWidth(Image imagen) {
        int width = new ImageIcon(imagen).getIconWidth();
        return width;
    }

    /**
     * Obtiene el ancho de un IconImage
     */
    public static int getWidth(ImageIcon imagen) {
        return imagen.getIconWidth();
    }

    /**
     * Obtiene el alto de una Image
     */
    public static int getHeight(Image imagen) {
        int height = new ImageIcon(imagen).getIconHeight();
        return height;
    }

    /**
     * Obtiene el alto de un IconImage
     */
    public static int getHeight(ImageIcon imagen) {
        return imagen.getIconHeight();
    }
}

Related

  1. fitImage(JLabel label, BufferedImage image)
  2. getResizedImage(BufferedImage image)
  3. getResizeFactor(BufferedImage source, int maxWidth, int maxHeight)
  4. imageResize(BufferedImage image, int width, int height)
  5. linearResizeImage(BufferedImage origin, int width, int height)