Bonjour, je suis actuellement en train de faire des manipulation sur des fichiers bitmap en langage C. J'utilise les api fournies par windows. Je cherche a créer un fichier bitmap (j'ai reussi), et a donner une valeur a chaque pixel de l'image. J'utilise pour ceci deux boucles. J'ai fait quelques recherche et je tente d'utiliser l'api SetPixel(). Cependant, j'obtiens bien mon fichier bitmap crée mais le contenu est uniquement des pixels noirs. Pourriez vous m'aider svp en me disans ce qu'il faudrait corriger dans mon code: (Voici la partie du code correspondant à cela)
//Declaration des variables
BITMAPFILEHEADER fileHeader;
BITMAPINFOHEADER infoHeader;
int bitmap_dx = largeur;
int bitmap_dy = hauteur;
HANDLE hLogFile;
BITMAPINFO info;
BYTE* memory = 0;
HBITMAP bitmap;
LPDWORD dwBytesWritten;
HDC winDC = NULL;
int i;
int j;
HDC memDC;
HBITMAP hBitmap;
ZeroMemory(&fileHeader, sizeof(BITMAPFILEHEADER));
fileHeader.bfType = 0x4d42; // Nombre magique
fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
//Remplissage des headers
infoHeader.biCompression = 0; // BI_RGB;
infoHeader.biXPelsPerMeter = 0;
infoHeader.biYPelsPerMeter = 0;
infoHeader.biSizeImage = 0;
infoHeader.biClrUsed = 0;
infoHeader.biClrImportant = 0;
infoHeader.biSize = sizeof(infoHeader);
infoHeader.biWidth = bitmap_dx;
infoHeader.biHeight = bitmap_dy;
infoHeader.biPlanes = 1;
infoHeader.biBitCount = 24;
infoHeader.biCompression = BI_RGB;
//Creation du fichier bitmap
hBitmap = CreateCompatibleBitmap(memDC, bitmap_dx, bitmap_dy);
hLogFile = CreateFile(
"C:\\Users\\Jonathan\\Documents\\Traitement d'image\\essai.bmp",
GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL);
//Ecriture des header dans le fichier
WriteFile(hLogFile, &fileHeader, sizeof(fileHeader), &dwBytesWritten, NULL);
WriteFile(hLogFile, &infoHeader, sizeof(infoHeader), &dwBytesWritten, NULL);
info.bmiHeader = infoHeader;
memDC = CreateCompatibleDC(winDC);
// Remplissage BMP
//C'est donc ici que j'utilise l'api SetPixel.
for (i = 0; i < bitmap_dx; ++i) {
for (j = 0; j < bitmap_dy; ++j) {
// SetPixel(memDC, i, j, 0x00FF0000); // http://msdn.microsoft.com/en- //us/library/dd183449(v=vs.85).aspx
}
}
BitBlt(memDC, 0, 0, bitmap_dx, bitmap_dy, winDC, 0, 0, SRCCOPY);
bitmap = CreateDIBSection(winDC, &info, DIB_RGB_COLORS, (void**) & memory,
0, 0);
SelectObject(memDC, bitmap);
DeleteDC(memDC);
ReleaseDC(NULL, winDC);
Merci d'avance à ceux qui m'aideront
Jonathan.