Red de conocimiento informático - Aprendizaje de programación - El maestro de Java está aquí, problema de mapa de bits~~~

El maestro de Java está aquí, problema de mapa de bits~~~

Autor Jean-Pierre Dubé

Resumen

Si bien Java proporciona varios mecanismos para abrir imágenes, guardar imágenes no es su punto fuerte. Este consejo explica cómo guardar una imagen como un archivo de imagen de 24 bits. Además, Jean-Pierre proporciona todo el código necesario para escribir un archivo de imagen en un archivo de mapa de bits.

Este consejo complementa el Consejo Java 43, que describe el proceso de carga de archivos de mapa de bits en aplicaciones Java. Este mes proporcionaré otro tutorial sobre cómo guardar una imagen en un archivo de imagen de 24 bits, que también incluye un fragmento de código para escribir un objeto de imagen en un archivo de mapa de bits.

La capacidad de crear archivos de mapa de bits es útil si trabaja en un entorno de Microsoft Windows. Por ejemplo, en mi último proyecto tuve que conectar Java con Microsoft Access. Los programas Java permiten a los usuarios hacer dibujos en la pantalla. Un programa Java que permite a los usuarios hacer dibujos en la pantalla y luego imprimirlas en un informe de Microsoft Access. Como Java no soporta OLE, mi única opción era crear un archivo de mapa de bits para el dibujo e indicarle a Microsoft Access dónde encontrarlo. Si alguna vez has escrito una aplicación que envía una imagen al portapapeles, este consejo podría ayudarte, especialmente si estás pasando esta información a otra aplicación.

Formato de archivo de mapa de bits

El formato de archivo de mapa de bits admite RLE (codificación de longitud de ejecución) de 4 bits, así como codificaciones de 8 y 24 bits. Dado que sólo estamos tratando con formatos de 24 bits, veamos la estructura de archivos a continuación.

Los archivos de mapa de bits se dividen en tres partes. Los he enumerado a continuación.

Parte 1: Encabezados de archivos de mapa de bits

El encabezado contiene la información de tipo, tamaño y diseño del archivo de mapa de bits. Su estructura es la siguiente (tomada de la definición de estructura C):

typedef struct tagBITMAPFILEHEADER {

UINT bfType

DWORD bfSize; p> UINT bfReserved1;

UINT bfReserved2;

DWORD bfOffBits;

}BITMAPFILEHEADER

La siguiente es una descripción del código. elementos de esta lista:

bfType: Especifica el tipo de archivo, su valor siempre es BM.

bfSize: Especifica el tamaño de todo el archivo en bytes.

bfReserved1: Reservado: debe ser 0.

bfReserved2: Reservado: debe ser 0.

bfOffBits: especifica el desplazamiento de bytes desde BitmapFileHeader hasta el encabezado de la imagen.

Ahora comprende que el propósito del archivo de encabezado de mapa de bits es identificar el archivo de mapa de bits. Cada programa que lee un archivo de mapa de bits utiliza el encabezado del mapa de bits para la verificación del archivo.

Parte 2: Encabezado de información de mapa de bits

El siguiente encabezado se llama encabezado de información y contiene las propiedades de la imagen misma.

A continuación se explica cómo especificar el tamaño y el formato de color de un mapa de bits independiente del dispositivo de Windows 3.0 (o posterior).

Formato de color y tamaño de mapa de bits independiente del dispositivo (DIB) 0 (o superior):

typedef struct tagBITMAPINFOHEADER {

DWORD biSize;

LONG biWidth ;

LONG biHeight;

WORD biPlanes;

WORD biBitCount;

DWORD biCompression;

DWORD biSizeImage ;

LONG biXPelsPerMeter;

LONG biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

}BITMAPINFOHEADER

La lista de códigos anterior es la siguiente:

BiSize: Especifica el número de bytes requeridos por la estructura BITMAPINFOHEADER.

biWidth: Especifica el ancho del mapa de bits en píxeles.

biHeight: Especifica la altura (píxeles) del mapa de bits.

biPlanes: Especifica el número de planos de bits del dispositivo de destino. El valor de esta variable miembro debe ser 1.

biBitCount: Especifica el número de bits por píxel. El valor debe ser 1, 4, 8 o 24.

biCompression: Especifica el tipo de compresión para mapas de bits comprimidos. En formato de 24 bits, esta variable se establece en 0.

biSizeImage: Especifica el tamaño de la imagen en bytes. Si el formato de mapa de bits es BI_RGB, establecer esta variable miembro en 0 es efectivo.

biXPelsPerMeter: especifica la resolución horizontal del dispositivo de destino del mapa de bits en píxeles por metro. Una aplicación puede utilizar este valor para seleccionar un mapa de bits de un conjunto de recursos que mejor coincida con las características del dispositivo actual.

biYPelsPerMeter: especifica la resolución vertical del dispositivo de destino del mapa de bits en píxeles por metro.

biClrUsed: Especifica el número de índices de color en la tabla de colores realmente utilizados por el mapa de bits. Si biBitCount se establece en 24, biClrUsed especifica la tabla de colores de referencia utilizada para optimizar el rendimiento de la paleta del sistema de ventanas.

biClrImportant (Importante): Especifica el número de índices de color que son importantes para la visualización de mapas de bits. Si el valor es 0, todos los colores son importantes.

Ya está definida toda la información necesaria para crear la imagen.

Parte 3: Imágenes

En formato de 24 bits, cada píxel de la imagen está representado por una secuencia RGB de tres bytes almacenada como BRG. Cada línea de exploración se rellena con 4 bits. Para complicar un poco más el proceso, la imagen se almacena de abajo hacia arriba, es decir, la primera línea de escaneo es la última línea de escaneo de la imagen. La siguiente imagen muestra los encabezados (BITMAPHEADER) y (BITMAPINFOHEADER) y las distintas partes de la imagen.

Las partes están separadas por líneas verticales:

0000000000 4D42 B536 0002 0000 0000 0036 0000 |p>

0000000020 0000 0107 0000 00E0 0000 0001 0018 0000

p>

0000000040 0000 B500 0002 0EC4 0000 0EC4 0000 0000 0000

0000000060 0000 0000 0000 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF

*

Ahora, ahora, comencemos a revisar el código

Ahora que conocemos la estructura de un archivo de imagen de 24 bits, esto es lo que lo que puede esperar Hace mucho tiempo: código para escribir objetos de imagen en archivos de mapa de bits.

importar java.awt.*;

importar java.io.*

importar java.awt.image.*; >importar java.awt.image.*;

importar java.awt.image.*;