
Este es el volcado hexadecimal de un mapa de bits de 5x5 coloreado con el color rojo:
Mi pregunta es, ¿cómo cambio solo los valores hexadecimales (sin usar una herramienta como Paint) para cambiar el color del mapa de bits a, por ejemplo, el color verde (0,255,0)
o cualquier color?
En cierta medida, ¿cómo convierten herramientas como Paint los píxeles que dibujas en hexadecimales para guardar el mapa de bits?
Respuesta1
Aquí hay documentación para BMP:https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29
La forma corta es:
- Encabezado BMP de 14 bytes (información del archivo)
- Encabezado DIB de 40 bytes (información de imagen)
- píxeles
Puede ver en la sección del encabezado DIB los dos valores 5 para las dimensiones de píxeles y un valor hexadecimal (18) para color de 24 bits (RGB).
De particular interés es el "Ejemplo 1" en la wiki que muestra un volcado HEX para una imagen de 2x2 similar a la que tiene aquí. Algunas notas:
- un byte, visualmente, es un pareado de dos dígitos (el primer byte de su imagen es 42).
- el conteo comienza en 0, por lo que "desplazamiento 31" es el byte 32.
- todos los números son HEX, por lo que hex(10) = dec(16). Puede utilizar la calculadora de Windows configurada en "modo programador" si necesita ayuda para realizar la conversión.
- El "orden de bytes" es de menor a mayor, por lo que un valor de 4 bytes de "05 00 00 00" debe entenderse como "00 00 00 05".
- los tripletes RGB en el bmp están invertidos
Según el volcado hexadecimal y la documentación, su imagen almacena cada píxel como un triplete RGB sin comprimir. El primer píxel es el triplete 24 1c ed
, pero esto está al revés, por lo que es hexadecimal (ed1c24), que de hecho es de color rojo. Tenga en cuenta que hay un 00
pad después de cada fila de 5 píxeles. La documentación dice que esto es para "alineación de bytes".
Entonces, para cambiar un píxel de rojo a azul, puedes alterar uno de los tripletes de 24 1c ed
a ed 1c 24
.
En cuanto al software, abriría el archivo (o una copia) con un editor hexadecimal, realizaría los cambios y lo guardaría. Simplemente usar un editor de texto en "modo de edición de texto" no es suficiente ya que el símbolo de texto "0" no es lo mismo que el valor numérico binario de 0.
Notepad++ de código abierto tiene capacidad de edición hexadecimal a través de complementos.
Con respecto a la cuestión más amplia de cómo Paint crea una imagen, el programa utiliza la documentación y los estándares para automatizar el proceso. Es principalmente una cuestión de convención. El "flujo de imágenes" (datos de píxeles) se almacena y manipula en la memoria en unsimilarmanera como se ve en el archivo de imagen sin comprimir.