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
| unsigned char nom [256];
HANDLE hFichier;
BITMAPFILEHEADER BFile;
BITMAPINFOHEADER BInfo;
long tmp;
...
// Remplissage des données utiles :
// BITMAPFILEHEADER
BFile.bfType = 'B' + ('M' * 256);
BFile.bfSize = sizeof (BITMAPFILEHEADER) +
sizeof (BITMAPINFOHEADER) + Bitmap.bmWidthBytes * Bitmap.bmHeight);
BFile.bfReserved1 = 0;
BFile.bfReserved2 = 0;
BFile.bfOffBits = sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER);
// BITMAPINFOHEADER
BInfo.biSize = sizeof (BITMAPINFOHEADER);
BInfo.biWidth = Bitmap.bmWidth;
BInfo.biHeight = Bitmap.bmHeight;
BInfo.biPlanes = 1;
BInfo.biBitCount = 24;
BInfo.biCompression = BI_RGB; // Peut-être un bug que de ne pas prendre en compte la compression ?..
BInfo.biSizeImage = Bitmap.bmWidthBytes * Bitmap.bmHeight;
BInfo.biXPelsPerMeter = 0;
BInfo.biYPelsPerMeter = 0;
BInfo.biClrUsed = 0;
BInfo.biClrImportant = 0;
// Création du fichier
if ((hFichier = CreateFile (nom, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL))
== INVALID_HANDLE_VALUE)
{
Message (hWnd, "Erreur dans la création du fichier.", "Création du fichier", FALSE);
break;}
// Copie des infos dans le fichier
if ((WriteFile (hFichier, &BFile, sizeof (BITMAPFILEHEADER), &tmp, NULL) == 0) ||
(WriteFile (hFichier, &BInfo, sizeof (BITMAPINFOHEADER), &tmp, NULL) == 0) ||
(WriteFile (hFichier, Bitmap.bmBits, Bitmap.bmWidthBytes * Bitmap.bmHeight, &tmp, NULL) == 0))
{
Message (hWnd, "Erreur dans l'écriture dans le fichier.", "Ecriture dans le fichier", TRUE);
CloseHandle (hFichier);
break;}
// Fermeture du fichier
if (CloseHandle (hFichier) == 0){
Message (hWnd, "Erreur dans la fermeture du fichier.", "Fermeture du fichier", TRUE);
break;} |
Partager