Ancho Y Alto De PCX - Ejercicio De Programacion C# Sharp

Este ejercicio consiste en crear un programa en C# que verifique si un archivo es una imagen en formato PCX y, si es así, extraiga y muestre las dimensiones (ancho y alto) de la imagen. Para hacerlo, el programa debe leer el encabezado del archivo PCX, que contiene información sobre la versión del archivo, la resolución y las coordenadas de la imagen, entre otras. A partir de las coordenadas Xmin, Ymin, Xmax, y Ymax, el programa puede calcular el ancho y el alto de la imagen. El ejercicio incluye el manejo de archivos binarios y la interpretación de datos de un archivo en formato PCX, lo que permite trabajar con imágenes en un formato específico y aprender sobre los detalles internos de su estructura.

 Categoría

Administración de Archivos

 Ejercicio

Ancho Y Alto De PCX

 Objectivo

Cree un programa que compruebe si un archivo parece una imagen PCX y, de ser así, muestre su ancho y alto, a partir de la siguiente especificación:

<---- ¿Qué es el formato PCX? <

El formato PCX se utiliza para almacenar imágenes. Es la empresa que diseñó el formato ZSoft para crear su programa de manipulación de imágenes conocido como Paintbrush.

Detalles internos de un archivo PCX Un archivo PCX consta de las siguientes partes: un archivo de encabezado, un encabezado de mapa de bits, una tabla de colores y bytes que definen la imagen.

Específicamente, los datos que forman el encabezado del archivo y el encabezado del mapa de bits son los siguientes:
Head Position Bytes Meaning
0 1 ID: must be 10
January 1 PCX File Version
0 = Version 2.5
2 = Version 2.8 with Palette
3 = Version 2.8 default palette
4 = Paintbrush for Windows
5 = Version 3.0 or higher, with the end of file palette.
February 1 Must be 1 to indicate RLE
January 3 bits per pixel
1 - Monochrome
4-16 colors
8 to 256 colors
August 4 Image Coordinates
Xmin, Ymin, Xmax, Ymax (4 data 2 bytes each)
February 12 horizontal resolution, in dots per inch
February 14 Vertical resolution in dots per inch
16 48 Colormap with the definition of the pallet in case of a 16 or fewer colors.
Organized in fields of 16 bytes * 3
64 1 Reserved
65 1 Number of planes (4 to 16 colors, 3-bits for RGB -24)
66 2 bytes per line image (the image width, measured in bytes)
68 2 Information palette
1 = Color
2 = Grayscale
70 2 Screen width (only used by Paintbrush IV and above)
72 2 Screen height (only used by Paintbrush IV and above)
74 54 bytes of padding, to complete 128 bytes of header. All bytes should be 0.

Con estos detalles podemos encontrar cierta información acerca del archivo. Por ejemplo, para conocer el ancho de un programa creado para nosotros, debemos abrir el archivo, pasar a la posición 4 (contando desde 0), dos datos leídos cuatro bytes (un "int16" en la nomenclatura utilizada por muchos lenguajes de programación), que sería Xmin, Ymin, Xmax, Ymax, y calculando: Ancho = Xmax - Xmin + 1, H = Ymax - Ymin + 1.

Si el número de versión es 5, la paleta de colores estará en los últimos 769 bytes del archivo: Primero se obtiene un valor 12, luego la R, G, B de los 256 colores de la paleta (estos valores son 0 255, deben dividirse por 4 si se muestran en una pantalla VGA, porque los componentes RGB de una tarjeta VGA solo van de 0 a 63).

Las imágenes en color de 24 bits (8 bits, 3 planos) llevan paleta para cada punto se almacenan componentes R, G, B.

 Ejemplo Ejercicio C#

 Copiar Código C#
// Import the necessary namespaces for file handling and basic input/output operations
using System;  
using System.IO;  

// Declare the main Program class
class Program
{
    // Main method where the program starts
    static void Main()
    {
        // Specify the path to the PCX image file
        string filePath = "image.pcx";  // Replace this with the path to your PCX file

        // Check if the file is a PCX image and display its width and height
        try
        {
            // Open the PCX file using a BinaryReader to read the raw bytes
            using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
            {
                // Read the first byte (ID), which must be 10 for a valid PCX file
                byte id = reader.ReadByte();  
                if (id != 10)  // Check if the ID is 10, which is required for PCX format
                {
                    Console.WriteLine("This is not a valid PCX file.");
                    return;  // Exit the program if the ID is not correct
                }

                // Skip the next 3 bytes (Version, Encoding, and Bits per Pixel) since we're not using them here
                reader.BaseStream.Seek(3, SeekOrigin.Current);  

                // Read the coordinates (Xmin, Ymin, Xmax, Ymax) from position 4
                reader.BaseStream.Seek(4, SeekOrigin.Begin);  
                ushort xmin = reader.ReadUInt16();  // Read Xmin (2 bytes)
                ushort ymin = reader.ReadUInt16();  // Read Ymin (2 bytes)
                ushort xmax = reader.ReadUInt16();  // Read Xmax (2 bytes)
                ushort ymax = reader.ReadUInt16();  // Read Ymax (2 bytes)

                // Calculate the width and height of the image
                int width = xmax - xmin + 1;  // Width = Xmax - Xmin + 1
                int height = ymax - ymin + 1;  // Height = Ymax - Ymin + 1

                // Print the width and height of the PCX image
                Console.WriteLine($"PCX Image Width: {width} pixels");
                Console.WriteLine($"PCX Image Height: {height} pixels");
            }
        }
        catch (Exception ex)  // Catch any errors that may occur during file reading
        {
            // Print the error message to the console
            Console.WriteLine($"Error reading the file: {ex.Message}");
        }
    }
}

 Salida

A PCX file called image.pcx with the following structure (simplified for illustration):

The first byte is 10, indicating it’s a PCX file.
After skipping some bytes (for version, encoding, etc.), we read the coordinates xmin, ymin, xmax, ymax to calculate the image dimensions.

The program will read this file and print the following output:
PCX Image Width: 200 pixels
PCX Image Height: 150 pixels

Example Error Handling:
Error reading the file: The system cannot find the file specified.

 Comparte este Ejercicio C# Sharp

 Más Ejercicios de Programacion C# Sharp de Administración de Archivos

¡Explora nuestro conjunto de ejercicios de programación C# Sharp! Estos ejercicios, diseñados específicamente para principiantes, te ayudarán a desarrollar una sólida comprensión de los conceptos básicos de C#. Desde variables y tipos de datos hasta estructuras de control y funciones simples, cada ejercicio está diseñado para desafiarte de manera gradual a medida que adquieres confianza en la codificación en C#.

  •  Extraer texto de un archivo binario

    Este ejercicio consiste en crear un programa en C# que extraiga solo los caracteres alfabéticos contenidos en un archivo binario y los volque en un archivo separado. ...

  •  Conversor de C# a Pascal

    Este ejercicio consiste en crear un programa en C# que convierta programas simples en C# a su equivalente en el lenguaje Pascal. El programa debe leer u...

  •  Volcado

    Este ejercicio consiste en crear una utilidad de "dump": un visor hexadecimal que muestra el contenido de un archivo, con 16 bytes por fila y 24 filas por pantalla. El progr...

  •  Extractor DBF

    Este ejercicio consiste en crear un programa que muestre la lista de campos almacenados en un archivo DBF. El formato DBF es utilizado por el antiguo gestor de bases de dato...

  •  Texto censurado

    Este ejercicio consiste en crear un programa que censure archivos de texto. El programa debe leer un archivo de texto y volcar su contenido a un nuevo archivo, reemplazando ...

  •  SQL a texto

    En este ejercicio, debes crear un programa en C# capaz de analizar comandos SQL de tipo INSERT y extraer sus datos en líneas de texto separadas. El programa debe proc...