1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #include "bitmap.h"
CMonBitmap::CMonBitmap(string fileName) {
inputFile.open(fileName.c_str(),ios::binary);// Ouverture du flux binaire
if(!inputFile)
{
cout<<"Ouverture fichier "<<fileName<<" impossible."<<endl;
exit(1);
}
setFileHeader();
setInfoHeader();
setBitmap();
}
CMonBitmap::~CMonBitmap() {
if(lpstrBitmap) delete[] lpstrBitmap;
if(lpstrQuads) delete[] lpstrQuads;
inputFile.close();
}
void CMonBitmap::setFileHeader(void) {
cout<<"Entree dans setFileHeader"<<endl;
inputFile.read((char*) &strctFileHeader,sizeof(BITMAPFILEHEADER));
cout<<"Type : "<<strctFileHeader.bfType<<endl;
cout<<"Taille du fichier : "<<strctFileHeader.bfSize<<endl;
cout<<"Offset du debut du bitmap : "<<strctFileHeader.bfOffBits<<endl;
}
void CMonBitmap::setInfoHeader(void) {
cout<<"Entree dans setInfoHeader"<<endl;
inputFile.read((char*) &strctInfoHeader,sizeof(BITMAPINFOHEADER));
cout<<"Taille de la structure BITMAPINFOHEADER : "<<strctInfoHeader.biSize<<endl;
cout<<"Largeur/hauteur du bitmap : "<<strctInfoHeader.biWidth<<"/"<<strctInfoHeader.biHeight<<endl;
cout<<"Valeur de biClrUsed : "<<strctInfoHeader.biClrUsed<<endl;
cout<<"Valeur de biBitCount : "<<strctInfoHeader.biBitCount<<endl;
}
void CMonBitmap::setBitmap(void) {
cout<<"Entree dans setBitmap"<<endl;
if(strctInfoHeader.biClrUsed == 0)
{
switch(strctInfoHeader.biBitCount)
{
case 1:
uNBQuad = 2;
break;
case 4:
uNBQuad = 16;
break;
case 8:
uNBQuad = 256;
break;
case 24:
uNBQuad = 0;
break;
default: //erreur ?!?! (division par zéro)
uNBQuad = 1/(strctInfoHeader.biBitCount - strctInfoHeader.biBitCount);
break;
}
}
else if(strctInfoHeader.biClrUsed > 0) uNBQuad = strctInfoHeader.biClrUsed;
else 1/(strctInfoHeader.biBitCount - strctInfoHeader.biBitCount); // erreur !?!? (division par zéro)
if(uNBQuad)
{
long int nbOctets = uNBQuad*RGBQUAD_SIZE;
lpstrQuads = new char[uNBQuad];
inputFile.read((char*) lpstrQuads,nbOctets);
cout<<"Taille de la table des couleurs : "<<nbOctets<<endl;
nbOctets = strctFileHeader.bfSize - strctFileHeader.bfOffBits;
cout<<"Taille du bitmap : "<<nbOctets<<endl;
lpstrBitmap = new char[nbOctets];
cout<<"adresse bitmap definie ..."<<endl;
inputFile.read((char*) lpstrBitmap,nbOctets);
cout<<"Allocation terminee ..."<<endl;
}
else
{
int nbOctets = strctFileHeader.bfSize - strctFileHeader.bfOffBits;
cout<<"pas de table couleurs... "<<endl;
}
} |