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();
}
}