Clase ImagenBMP en Java: rotación de imágenes BMP 40x40 en 180 grados

Clasificado en Inglés

Escrito el en catalán con un tamaño de 3,55 KB

Clase ImagenBMP: rotación de imágenes BMP 40x40 en Java

Clase para rotar imágenes BMP de 40x40 píxeles. Los ficheros BMP de 40x40 se componen de 54 bytes de cabecera y 40 × 40 × 3 = 4800 bytes de información de la imagen.

@author

@version

import java.io.*;

public class ImagenBMP {
    public static final int ANCHO = 40;
    public static final int ALTO = 40;
    public static final int TAM_CABECERAS = 54;

    private String nombreImagen;
    private byte[] cabecera;
    private Pixel[][] pixel;

    /**
     * Crea una imagen BMP a partir de un fichero con el nombre dado.
     * @param nom nombre del fichero para leer los bytes de la imagen.
     */
    public ImagenBMP(String nom) {
        nombreImagen = nom;
        cabecera = new byte[TAM_CABECERAS];
        pixel = new Pixel[ANCHO][ALTO];
    }

    /**
     * Carga una imagen BMP de ANCHO x ALTO desde el fichero con el nombre dado.
     * @param nombrefichero nombre del fichero a cargar.
     */
    public void setImagen(String nombrefichero) {
        try {
            FileInputStream in = new FileInputStream(nombrefichero);
            int leido;
            in.read(cabecera);
            for (int i = 0; i < pixel.length; i++) {
                for (int j = 0; j < pixel[i].length; j++) {
                    leido = in.read();
                    byte rojo = (byte) leido;
                    leido = in.read();
                    byte azul = (byte) leido;
                    leido = in.read();
                    byte verde = (byte) leido;
                    Pixel p = new Pixel(rojo, azul, verde);
                    pixel[i][j] = p;
                }
            }
            in.close();
        } catch (FileNotFoundException e) {
            System.out.println("No existe el fichero");
        } catch (IOException e) {
            System.out.println("Error E/S");
        }
    }

    /**
     * Rota la imagen dada 180 grados.
     */
    public void rotar180() {
        Pixel[][] nuevopixel = new Pixel[ANCHO][ALTO];
        for (int i = 0; i < pixel.length; i++) {
            for (int j = 0; j < pixel[i].length; j++) {
                nuevopixel[i][j] = pixel[ANCHO - 1 - i][ALTO - 1 - j];
            }
        }
        pixel = nuevopixel;
    }

    /**
     * Vuelca la imagen en el fichero indicado.
     * @param nombreFichero nombre del fichero en el que se volcará la imagen.
     */
    public void VolcarImagen(String nombreFichero) {
        try {
            FileOutputStream out = new FileOutputStream(nombreFichero);
            out.write(cabecera);
            for (int i = 0; i < pixel.length; i++) {
                for (int j = 0; j < pixel[i].length; j++) {
                    out.write(pixel[i][j].getRojo());
                    out.write(pixel[i][j].getAzul());
                    out.write(pixel[i][j].getVerde());
                }
            }
            out.close();
        } catch (FileNotFoundException e) {
            System.out.println("No existe el fichero");
        } catch (IOException e) {
            System.out.println("Error E/S");
        }
    }

    /**
     * Guarda en el fichero original los datos de la imagen.
     */
    public void guardarImagen() {
        VolcarImagen(nombreImagen);
    }

    /**
     * Método main que ejecuta todo el proceso.
     */
    public static void main(String[] args) {
        ImagenBMP foto = new ImagenBMP("orig.bmp");
        foto.setImagen("orig.bmp");
        foto.rotar180();
        foto.guardarImagen();
    }
}

Entradas relacionadas: