0

I want to read a bmp file in c.
i can read the header but now i need to see het photo.
the attachments is am exemple.

#include <stdio.h>


/* We moeten een apparte struct aanmaken voor de Magic Number, anders krijgen we een foutieve waarde hiervoor.*/

struct MagicNumber{
    unsigned char type[2];            //Magicnumber, gebruikt om de BMP file te identificeren. Meestal staat hier “BM”//
}BmpMN;

struct INFOHEADER{
    
    unsigned int sizeByte;            //De grootte van dit bestand, uitgedrukt in bytes.//
    unsigned short reserved1;        //Enkele gereserveerde bytes, deze mogen ingevuld worden door het programma dat de afbeelding aanmaakt//
    unsigned short reserved2;        //Enkele gereserveerde bytes, deze mogen ingevuld worden door het programma dat de afbeelding aanmaakt//
    unsigned int offsetbits;        //De offset:het begin adres van de byte waarop de bitmap data kan gevonden worden. Dit is meestal gelijk aan de grootte van de header+ palette//
    unsigned int sizeHeader;        //Grootte van de header(in dit geval 40 bytes)//
    int width;                        //Breedte van de bitmap in pixels//
    int heigth;                        //Hoogte van de bitmap in pixels//
    unsigned short planes;            //Het aantal kleurvlakken dat gebruikt werd, deze waarde staat op 1//
    unsigned short bitcount;        //Aantal bits per pixel (1 4 8 16 24 of 32)//
    unsigned int compression;        //Compressie methode (een getal tussen 0 en 5, meestal 0)//
    unsigned int sizeImage;            //Grootte van de bitmap image data in bytes//
    int xpelspermeter;                //Horizontale resolutie,in pixels per meter//
    int ypelspermeter;                //Verticale resolutie, in pixels per meter//
    unsigned int colorsused;        //Het aantal kleuren in de kleurenpalet. Indien hier 0 staat is het 2^n.//
    unsigned int colorsimportant;    //Het aantal belangrijke kleuren in het palet(meestal 0)//
    unsigned int palette1;            //Waarde van de kleur zwart in R-G-B//
    unsigned int palette2;            //Waarde van de kleur wit in R-G-B//
    
    
} BitmapInfoHeader; 


void leesBestand() {
    FILE *filepointer;
	int i=0;
	char foto[2000];//Pointer aanmaken van het type 'FILE'//
    char mode[]="rb";                                    //Modus: w voor 'write', r voor 'read'//
    char INfile[]="C:\\x_2k.bmp";                        //Bestandsnaam//
                                                    
    if ((filepointer = fopen(INfile, mode)) == NULL)    //Maak een pointer aan naar het bestand op de harde schijf //
    {
            printf("Cannot open %s file\n", INfile);    //Geef melding als pointer een NULL-return geeft//
            return 0;                                    //Anders loopt het programma nog vast als er een foutieve bestandsnaam is ingevoerd//
    }
    else                                                //Anders begin programma om header in te lezen//
    {
            printf("\n** READING FILE **\n");

            fread(&BmpMN,sizeof(BmpMN),1,filepointer);
            printf("Magic Number: %s\n",BmpMN.type);
        
            fread(&BitmapInfoHeader,sizeof(BitmapInfoHeader),1,filepointer);
            printf("Size in bytes: %d\n",BitmapInfoHeader.sizeByte);
            printf("Reserved bytes: %d %d\n",BitmapInfoHeader.reserved1,BitmapInfoHeader.reserved2);
            printf("Starting byte: %d\n",BitmapInfoHeader.offsetbits);
            printf("Size of header: %d\n",BitmapInfoHeader.sizeHeader);
            printf("Dimensions of bitmap: %d by %d\n",BitmapInfoHeader.width,BitmapInfoHeader.heigth);
            printf("Color planes: %d\n",BitmapInfoHeader.planes);
            printf("Bits per pixel: %d\n",BitmapInfoHeader.bitcount);
            printf("Compression type: %d\n",BitmapInfoHeader.compression);
            printf("Image content <in bytes>: %d\n",BitmapInfoHeader.sizeImage);
            printf("Horizontal resolution: %d\n",BitmapInfoHeader.xpelspermeter);
            printf("Vertical resolution: %d\n",BitmapInfoHeader.ypelspermeter);
            printf("Colors in palette: %d\n",BitmapInfoHeader.colorsused);
            printf("Important colors used: %d\n",BitmapInfoHeader.colorsimportant);
            printf("Palette: %x %x\n",BitmapInfoHeader.palette1,BitmapInfoHeader.palette2);
    }
                                    
    fclose(filepointer); // sluit het bestand // 

	
	
	
	
	
 };

 

int main(void){



printf("*****************************************************************\n");
printf("*Dit project is ontwikkeld door Jongen Joeri en Dewalque Michael*\n"); 
printf("*****************************************************************\n");


leesBestand();

    return 0; 
}
Attachments bmp.jpg 116.31 KB
2
Contributors
1
Reply
3
Views
6 Years
Discussion Span
Last Post by myk45
1

Ok, all you need is the use of a graphic library(i would suggest OpenGL) to render the pixels.

http://www.talisman.org/opengl-1.1/Reference/glDrawPixels.html

All you need is to render these pixels after reading it into a buffer.

fread(buff, 1, 800 * 600 * 3, fp); // read into buffer (i assumed an 800 x 600 image)

graphic_func();

What i mean by graphic_func is, a function in the graphic library that supports rendering of pixels, which is glDrawPixels in case of OpenGL.

Of course, there are quite a few initializations to be done.

Here is some extra information about OpenGL:

http://www.opengl.org/about/overview/

Edited by myk45: n/a

Votes + Comments
good job!
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.