- #include <iostream>
- #include "entetebmp.h"
-
-
- char bin_bmp (char src[], char dest[])
- {
- BMPINFO entete;//premiere partie de l'entete
- WININFOHEAD entete2;//deuxieme partie
- WINRGBQUAD * palette;//ptr sur la palette de couleurs
- unsigned char * image;//ptr sur le buffer de l'image
- unsigned int taille_image=0;//taille de l'image en octet
- char erreur=0;
-
- FILE* ptr_src;//pointeur sur le fichier source
- FILE* ptr_dest;//pointeur sur le fichier destination
-
- if((ptr_src=fopen(src,"rb"))!=NULL)
- {
- //recup les infos
- fread(&entete,sizeof(BMPINFO),1,ptr_src);
-
- //verife si bmp
- if(entete.Type==0x4d42)
- {
- fread(&entete2,sizeof(WININFOHEAD),1,ptr_src);
-
- //on creer un buffer pour stocker la palette
- palette=new WINRGBQUAD[entete2.ClrUsed];
-
- fread(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_src);
- taille_image=((entete2.Height*entete2.Width)*(entete2.BitCount/8));
-
- //on creer un buffer pour stocker l'image
- image=new unsigned char[taille_image];
-
- //on recupere
- fread(image,sizeof(char),taille_image,ptr_src);
- fclose(ptr_src);
-
- //on binarise a 0x80
- for(int i=0; i!=taille_image; i++)
- if(image[i]<0x80)
- image[i]=0x00;
- else
- image[i]=0xff;
-
- //ouvre ou creer le fichier de destination
- if((ptr_dest=fopen(dest,"wb"))!=NULL)
- {
- fwrite(&entete,sizeof(BMPINFO),1,ptr_dest);
- fwrite(&entete2,sizeof(WININFOHEAD),1,ptr_dest);
- fwrite(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_dest);
- fwrite(image,sizeof(char),taille_image,ptr_dest);
- fclose(ptr_dest);
- }
- else
- erreur=3;//pb ac fichier destination
- //libere la memoire
- delete []palette;
- delete []image;
- }
- else
- erreur=1;//le fichier n'est pas un bmp
- }
- else
- erreur=2;//pb ac fichier source
-
-
- return(erreur);
- }
-
- /***********************************************************
- ***************** FICHIER entetebmp.h ************************
- ***********************************************************/
- /*
- ** BMP File Format Bitmap Header.
- */
- typedef struct _BmpInfo /* Offset Description */
- {
- WORD Type; /* 00h File Type Identifier (4D42h) */
- DWORD FileSize; /* 02h Size of File */
- WORD Reserved1; /* 06h Reserved (should be 0) */
- WORD Reserved2; /* 08h Reserved (should be 0) */
- DWORD Offset; /* 0Ah Offset to bitmap data */
- } BMPINFO;
-
- /*
- ** Windows 3.x Information Header Format.
- */
- typedef struct _WinInfoHeader /* Offset Description */
- {
- DWORD Size; /* 0Eh Size of Remianing Header */
- DWORD Width; /* 12h Width of Bitmap in Points */
- DWORD Height; /* 16h Height of Bitmap in Points */
- WORD Planes; /* 1Ah Number of Planes */
- WORD BitCount; /* 1Ch Bits Per Point */
- DWORD Compression; /* 1Eh Compression Scheme (0=none) */
- DWORD SizeImage; /* 22h Size of bitmap in bytes */
- DWORD XPelsPerMeter; /* 26h Horz. Resolution in Points/Meter */
- DWORD YPelsPerMeter; /* 2Ah Vert. Resolution in Points/Meter */
- DWORD ClrUsed; /* 2Eh Number of Colors in Color Table */
- DWORD ClrImportant; /* 32h Number of Important Colors */
- } WININFOHEAD;
-
- /*
- ** Windows 3.x RGB Color Quadruple.
- */
- typedef struct _WinRgbQuad
- {
- BYTE rgbBlue; /* Blue Intensity Value */
- BYTE rgbGreen; /* Green Intensity Value */
- BYTE rgbRed; /* Red Intensity Value */
- BYTE rgbReserved;
- /* Reserved (should be 0) */
- } WINRGBQUAD;
-
#include <iostream>
#include "entetebmp.h"
char bin_bmp (char src[], char dest[])
{
BMPINFO entete;//premiere partie de l'entete
WININFOHEAD entete2;//deuxieme partie
WINRGBQUAD * palette;//ptr sur la palette de couleurs
unsigned char * image;//ptr sur le buffer de l'image
unsigned int taille_image=0;//taille de l'image en octet
char erreur=0;
FILE* ptr_src;//pointeur sur le fichier source
FILE* ptr_dest;//pointeur sur le fichier destination
if((ptr_src=fopen(src,"rb"))!=NULL)
{
//recup les infos
fread(&entete,sizeof(BMPINFO),1,ptr_src);
//verife si bmp
if(entete.Type==0x4d42)
{
fread(&entete2,sizeof(WININFOHEAD),1,ptr_src);
//on creer un buffer pour stocker la palette
palette=new WINRGBQUAD[entete2.ClrUsed];
fread(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_src);
taille_image=((entete2.Height*entete2.Width)*(entete2.BitCount/8));
//on creer un buffer pour stocker l'image
image=new unsigned char[taille_image];
//on recupere
fread(image,sizeof(char),taille_image,ptr_src);
fclose(ptr_src);
//on binarise a 0x80
for(int i=0; i!=taille_image; i++)
if(image[i]<0x80)
image[i]=0x00;
else
image[i]=0xff;
//ouvre ou creer le fichier de destination
if((ptr_dest=fopen(dest,"wb"))!=NULL)
{
fwrite(&entete,sizeof(BMPINFO),1,ptr_dest);
fwrite(&entete2,sizeof(WININFOHEAD),1,ptr_dest);
fwrite(palette,sizeof(WINRGBQUAD),entete2.ClrUsed,ptr_dest);
fwrite(image,sizeof(char),taille_image,ptr_dest);
fclose(ptr_dest);
}
else
erreur=3;//pb ac fichier destination
//libere la memoire
delete []palette;
delete []image;
}
else
erreur=1;//le fichier n'est pas un bmp
}
else
erreur=2;//pb ac fichier source
return(erreur);
}
/***********************************************************
***************** FICHIER entetebmp.h ************************
***********************************************************/
/*
** BMP File Format Bitmap Header.
*/
typedef struct _BmpInfo /* Offset Description */
{
WORD Type; /* 00h File Type Identifier (4D42h) */
DWORD FileSize; /* 02h Size of File */
WORD Reserved1; /* 06h Reserved (should be 0) */
WORD Reserved2; /* 08h Reserved (should be 0) */
DWORD Offset; /* 0Ah Offset to bitmap data */
} BMPINFO;
/*
** Windows 3.x Information Header Format.
*/
typedef struct _WinInfoHeader /* Offset Description */
{
DWORD Size; /* 0Eh Size of Remianing Header */
DWORD Width; /* 12h Width of Bitmap in Points */
DWORD Height; /* 16h Height of Bitmap in Points */
WORD Planes; /* 1Ah Number of Planes */
WORD BitCount; /* 1Ch Bits Per Point */
DWORD Compression; /* 1Eh Compression Scheme (0=none) */
DWORD SizeImage; /* 22h Size of bitmap in bytes */
DWORD XPelsPerMeter; /* 26h Horz. Resolution in Points/Meter */
DWORD YPelsPerMeter; /* 2Ah Vert. Resolution in Points/Meter */
DWORD ClrUsed; /* 2Eh Number of Colors in Color Table */
DWORD ClrImportant; /* 32h Number of Important Colors */
} WININFOHEAD;
/*
** Windows 3.x RGB Color Quadruple.
*/
typedef struct _WinRgbQuad
{
BYTE rgbBlue; /* Blue Intensity Value */
BYTE rgbGreen; /* Green Intensity Value */
BYTE rgbRed; /* Red Intensity Value */
BYTE rgbReserved;
/* Reserved (should be 0) */
} WINRGBQUAD;