Salut les programmeurs !
voilà je veux enregistrer mon image RVB en Noir&Blanc mais il doit avoir quelque chose queje ne fais pas car mon fichier est impossible à ouvrir !
donc si vous pouviez y jetter un oeil voir 2 je suis pas contre !
Merci !
//---------------------------------------------------------------------------
// L'entête décrit une image monochrome 8 bits
static void _InitEntete (int tailleX, int tailleY, int nbOctetsParPixel)
//---------------------------------------------------------------------------
{
//initialiser le BITMAPFILEHEADER
_bmpFileHeader.bfType = ('M'<<8)|'B';
//offset de l'image dans le fichier (taille de l'entête)
_bmpFileHeader.bfOffBits = sizeof(_bmpFileHeader) +
sizeof(_bmpInfoHeader);
//taille totale du fichier (entête + image)
_bmpFileHeader.bfSize = _bmpFileHeader.bfOffBits +
abs(tailleX*tailleY*nbOctetsParPixel);
_bmpFileHeader.bfReserved1 = 0;
_bmpFileHeader.bfReserved2 = 0;
//initialiser le BITMAPINFOHEADER
_bmpInfoHeader.biSize=sizeof(BITMAPINFOHEADER);
_bmpInfoHeader.biWidth=tailleX;
_bmpInfoHeader.biHeight=tailleY;
_bmpInfoHeader.biPlanes=1;
_bmpInfoHeader.biBitCount=8*nbOctetsParPixel;
_bmpInfoHeader.biCompression=BI_RGB;
_bmpInfoHeader.biSizeImage=abs(tailleX*tailleY*nbOctetsParPixel);
_bmpInfoHeader.biXPelsPerMeter=0;
_bmpInfoHeader.biYPelsPerMeter=0;
_bmpInfoHeader.biClrUsed=0;
_bmpInfoHeader.biClrImportant=0;
}
//structure BITMAPINFO monochrome;
static struct {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[256];
} bmpInfoMono =
{{
sizeof(BITMAPINFOHEADER), //biSize
0, //biWidth
0, //biHeight
1, //biPlanes
8, //biBitCount
BI_RGB, //biCompression
0, //biSizeImage
0, //biXPelsPerMeter
0, //biYPelsPerMeter
256, //biClrUsed
0 //biClrImportant
},
0};
//---------------------------------------------------------------------------
int BMP_Enregistrer (const char *nomFichier, const unsigned char* pImage,
int tailleX, int tailleY, int nbOctetsParPixel)
//---------------------------------------------------------------------------
{
int F;
double t0, t;
char mess[100];
//initialiser l'entete si nécessaire
/* if ((_bmpInfoHeader.biWidth!=tailleX) ||
(_bmpInfoHeader.biHeight!=tailleY) ||
(_bmpInfoHeader.biBitCount!=8*nbOctetsParPixel)) {
_InitEntete(tailleX, tailleY, nbOctetsParPixel);
OutputDebugString("[IRCMesureur] _InitEntete()");
//mode de fermeture des fichiers : CloseFile retourne sans vérifier l'écriture
SetCommitMode(0);
} */
if ((bmpInfoMono.bmiHeader.biWidth!=tailleX) ||
(bmpInfoMono.bmiHeader.biHeight!=tailleY) ||
(bmpInfoMono.bmiHeader.biBitCount!=8*nbOctetsParPixel))
{
bmpInfoMono.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmpInfoMono.bmiHeader.biWidth=tailleX;
bmpInfoMono.bmiHeader.biHeight=tailleY;
bmpInfoMono.bmiHeader.biPlanes=1;
bmpInfoMono.bmiHeader.biBitCount=8;
bmpInfoMono.bmiHeader.biCompression=BI_RGB;
bmpInfoMono.bmiHeader.biSizeImage=abs(tailleX*tailleY);
bmpInfoMono.bmiHeader.biXPelsPerMeter=0;
bmpInfoMono.bmiHeader.biYPelsPerMeter=0;
bmpInfoMono.bmiHeader.biClrUsed=256;
bmpInfoMono.bmiHeader.biClrImportant=256;
//mode de fermeture des fichiers : CloseFile retourne sans vérifier l'écriture
SetCommitMode(0);
}
t0 = Timer();
F = OpenFile (nomFichier, VAL_WRITE_ONLY, VAL_OPEN_AS_IS, VAL_BINARY);
if (F<0) return -1;
//remplissage de la table de couleurs N&B au premier appel
if (!bmpInfoMono.bmiColors[1].rgbBlue)
{
int i;
for (i=0; i<256;i++)
{
bmpInfoMono.bmiColors[i].rgbBlue = i;
bmpInfoMono.bmiColors[i].rgbGreen = i;
bmpInfoMono.bmiColors[i].rgbRed = i;
bmpInfoMono.bmiColors[i].rgbReserved = 0;
}
}
/* WriteFile(F, (char*)&_bmpFileHeader, sizeof(_bmpFileHeader));
WriteFile(F, (char*)&_bmpInfoHeader, _bmpInfoHeader.biSize);
WriteFile(F, pImage, _bmpInfoHeader.biSizeImage); */
WriteFile(F, (char*)&bmpInfoMono.bmiHeader, sizeof(bmpInfoMono.bmiHeader));
WriteFile(F, (char*)&bmpInfoMono.bmiHeader, bmpInfoMono.bmiHeader.biSize);
WriteFile(F, pImage, bmpInfoMono.bmiHeader.biSizeImage);
t = Timer()-t0;
sprintf(mess,"[IRCMesureur] BMP_Enregistrer() Durée copie donnée = %6.3fs", t);
OutputDebugString(mess);
CloseFile(F);
t = Timer()-t0;
sprintf(mess,"[IRCMesureur] BMP_Enregistrer() Durée enregistrement = %6.3fs", t);
OutputDebugString(mess);
return 0;
}