Fandom

Scratchpad

PLE:Unidad7Ejercicio13

215,631pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

/*
Programa:         Unidad7jercicio13cpp
Fecha:            27/02/2007
Descripción:      Ficheros BMP. Lee la información de la cabecera y la muestra  en pantalla.


         Estructura de un bmp
         _______________________________________________________
        |                                                       |
        |Cabecera 14 bytes                                      |
        |Propiedades de la imagen (40 bytes)                    |
        |Paleta de color (opcional – su tamaño puede variar)    |
        |Datos de la imagen                                     |
        |_______________________________________________________|


        Cabecera
        ========
        Campo           bytes   Descripción
        Signature       2       Siempre es ‘BM’
        FileSize        4       Tamaño del fichero
        Reserved        4       No se usa
        DataOffset      4       Posición relativa del comienzo de los datos de imagen


        Propiedades de la imagen
        ========================
        Campo           bytes   Descripción
        Size            4       Tamaño de esta sección (siempre es 40 bytes)
        Width           4       Anchura de la imagen en pixels
        Height          4       Altura de la imagen en pixels
        Planes          2       Número de planos (siempre es 1)
        BitCount        2       Bits por píxel (1, 4, 8, 16, 24)
        Compression     4       Tipo de compresión empleado (0, 1, 2)
        ImageSize       4       Tamaño de la imagen comprimida (=0 si no se comprime)
        XPixelsPerM     4       Resolución horizontal: píxeles por metro
        YPixelsPerM     4       Resolución vertical: píxeles por metro
        ColorsUsed      4       Número de colores usados, si hay paleta.
        ColorsImportant 4       Número de colores importantes (=0 si son todos)
*/

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;


struct cabeceraBMP {
        char Signature[2];              /* Signatura = "BM"             */
        unsigned int FileSize;          /* Tamaño Fichero               */
        unsigned int Reserved;          /* Reservado                    */
        unsigned int DataOffset;        /* Desplazamiento de los datos  */
};

struct propiedadesBMP {
        unsigned int size;               /* Header size in bytes      */
        int width, height;               /* Width and height of image */
        unsigned short int planes;       /* Number of colour planes   */
        unsigned short int bits;         /* Bits per pixel            */
        unsigned int compression;        /* Compression type          */
        unsigned int imagesize;          /* Image size in bytes       */
        int xresolution, yresolution;    /* Pixels per meter          */
        unsigned int ncolours;           /* Number of colours         */
        unsigned int importantcolours;   /* Important colours         */
};

void leeCabecera(ifstream &f, cabeceraBMP &c);
void leePropiedades(ifstream &f, propiedadesBMP &p);
void muestraDatosBMP(cabeceraBMP cBMP, propiedadesBMP pBMP);

void main() {
        cabeceraBMP cBMP;
        propiedadesBMP pBMP;
        char nombre[80];
        ifstream fe;

        cout << "Introduzca nombre del archivo ";
        cin >> nombre;

        fe.open(nombre, ios::in | ios::binary);

        if(fe.good())
        {
                leeCabecera(fe,cBMP);
                leePropiedades(fe,pBMP);
                muestraDatosBMP(cBMP, pBMP);
                fe.close();
        }
        else
                cout << "Error: El fichero no existe ";
        cin.ignore();
        cin.get();
}

void leeCabecera(ifstream &f, cabeceraBMP &c)
{
        f.read(reinterpret_cast<char*>(&c.Signature[0]), sizeof(c.Signature[0]));
        f.read(reinterpret_cast<char*>(&c.Signature[1]), sizeof(c.Signature[1]));
        f.read(reinterpret_cast<char*>(&c.FileSize), sizeof(c.FileSize));
        f.read(reinterpret_cast<char*>(&c.Reserved), sizeof(c.Reserved));
        f.read(reinterpret_cast<char*>(&c.DataOffset), sizeof(c.DataOffset));
}

void leePropiedades(ifstream &f, propiedadesBMP &p)
{
        f.read(reinterpret_cast<char*>(&p.size), sizeof(p.size));
        f.read(reinterpret_cast<char*>(&p.width), sizeof(p.width));
        f.read(reinterpret_cast<char*>(&p.height), sizeof(p.height));
        f.read(reinterpret_cast<char*>(&p.planes), sizeof(p.planes));
        f.read(reinterpret_cast<char*>(&p.bits), sizeof(p.bits));
        f.read(reinterpret_cast<char*>(&p.compression), sizeof(p.compression));
        f.read(reinterpret_cast<char*>(&p.imagesize), sizeof(p.imagesize));
        f.read(reinterpret_cast<char*>(&p.xresolution), sizeof(p.xresolution));
        f.read(reinterpret_cast<char*>(&p.yresolution), sizeof(p.yresolution));
        f.read(reinterpret_cast<char*>(&p.ncolours), sizeof(p.ncolours));
        f.read(reinterpret_cast<char*>(&p.importantcolours), sizeof(p.importantcolours));
        if(p.imagesize == 0) // La imagen esta comprimida
                p.imagesize = p.width * p.height * p.bits / 8;
}

void muestraDatosBMP(cabeceraBMP cBMP, propiedadesBMP pBMP)
{
        cout << "Cabecera BMP " << endl << endl;
        cout << "Sgnatura = " << cBMP.Signature[0] << cBMP.Signature[1] << endl;
        cout << "Tam.Fichero = " << cBMP.FileSize << endl;
        cout << "Reservado = " << cBMP.Reserved << endl;
        cout << "Deplz. datos = " << cBMP.DataOffset << endl << endl;

        cout << "Propiedades BMP " << endl << endl;
        cout << "Tam. = " << pBMP.size << endl;
        cout << "Ancho = " << pBMP.width << endl;
        cout << "Alto = " << pBMP.height << endl;
        cout << "Planos = " << pBMP.planes << endl;
        cout << "Bits = " << pBMP.bits << endl;
        cout << "Compresion = " << pBMP.compression << endl;
        cout << "Tam. Imagen = " << pBMP.imagesize << endl;
        cout << "Resolucion X = " << pBMP.xresolution << endl;
        cout << "Resolucion Y = " << pBMP.yresolution << endl;
        cout << "Num. Colores = " << pBMP.ncolours << endl;
        cout << "Num. Col. Import. = " << pBMP.importantcolours << endl;
}

Also on Fandom

Random wikia