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;  
}

