Cifrar una imagen BMP
Última actualización:
23/08/2020
⁃
Dificultad:
Intermedio
Cree un programa en C# para cifrar una imagen con formato Windows bitmap. Primero debería comprobar que se trata de una imagen .bmp válida, revisando los datos de cabecera 'BM'. Si se trata de una imagen .bmp válida entonces cifre la imagen invirtiendo los dos primeros bytes que contienen la marca 'BM' por 'MP'.
Puede utilizar el constructor avanzado de FileStream
para leer y escribir al mismo tiempo.
Es un formato propio del sistema operativo Windows. Puede guardar imágenes hasta 24 bits (16,7 millones de colores).
El encabezado de una imagen BMP es el siguiente:
Descripción | Bytes |
Tipo (BM) | 0-1 |
Tamaño | 2-5 |
Reservado | 6-9 |
Inicio de los datos de la imagen | 10-13 |
Tamaño del bitmap | 14-17 |
Ancho (píxeles) | 18-21 |
Alto (píxeles) | 22-25 |
Número de planos | 26-27 |
Tamaño de cada punto | 28-29 |
Compresión | 30-33 |
Tamaño de imagen | 34-37 |
Resolución horizontal | 38-41 |
Resolución vertical | 42-45 |
Tamaño de la tabla de color | 46-49 |
Contador de colores | 50-53 |
Entrada
Salida
Solución
using System.IO;
public class CifrarImagenBMP
{
public static void Main(string[] args)
{
string nombreArchivo = "logo.bmp";
using (FileStream archivo = File.Open(nombreArchivo, FileMode.Open, FileAccess.ReadWrite))
{
char b1 = (char)archivo.ReadByte();
char b2 = (char)archivo.ReadByte();
if (b1 != 'B' || b2 != 'M')
{
return; // No es un archivo BMP
}
else
{
archivo.Seek(0, SeekOrigin.Begin);
archivo.WriteByte((byte)'M');
archivo.WriteByte((byte)'B');
}
}
}
}