Modification de fichier BMP

cs_titio Messages postés 6 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 mars 2006 - 14 mai 2005 à 17:44
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 - 15 mai 2005 à 12:23
Bonjour,
Je souhaite afficher des images bmp, tout en ayant la possibilité de modifier ce fichier. Pour cela, je le charge en memoire, et souhaite donc recuperer un pointeur sur le debut des données. J'utilise le code suivant. En principe, la structure BITMAP, par son membre bmBits devrait me donner ce pointeur, mais la, il est NULL. Comment faire pour recuperer ce pointeur ?

Merci

HBITMAP BitMap,CompatibleBitMap;
PAINTSTRUCT ps;
HDC hDC;
HDC hdcCompatible;
HBITMAP bmp,oldBmp;
BITMAP infoBmp;
void *BitPointeur;


BitMap=(HBITMAP)LoadImage(NULL,"Bitmap.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

BeginPaint(hwnd,&ps);
hDC=GetDC(hwnd);


hdcCompatible = CreateCompatibleDC(hDC);
GetObject(BitMap,sizeof(BITMAP),&infoBmp);

cxImage = infoBmp.bmWidth;
cyImage = infoBmp.bmHeight;
BitPointeur=infoBmp.bmBits; //ce pointeur pointe sue NULL...


SelectObject(hdcCompatible,BitMap);
BitBlt(hDC,10,
10,
cxImage,
cyImage,
hdcCompatible,
0,
0,
SRCCOPY
);


ReleaseDC(hwnd,hDC);


EndPaint(hwnd,&ps);

3 réponses

sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
15 mai 2005 à 11:35
y a une methode super simple si tu connais deja l'encodage de ton image : dans une bmp, la donnée commence toujours au 54eme octet.

------------------------------------------------------------------
int len;
char *buffer;
FILE *fd;

fd = fopen("mon_image.bmp", "rb"); // ouverture du fichier
fseek(fd, 0, SEEK_END); // positionnement du "pointeur" de fichier a la fin
len = ftell(fd) - 54; // obtention de la taille du fichier moins les 54 octets de l'en-tete
fseek(fd, 54, SEEK_SET); // positionnement du pointeur au 54eme octet (on zap le header)
buffer = malloc(len); // allocation de la taille memoire suffisante pour charger la donner bitmap
fread(buffer, sizeof(char), len, fd); // on lit le fichier (a partir de la position 54 due au fseek() precedent)
fclose(fd); // on ferme le fichier

// buffer contient la donner bitmap
------------------------------------------------------------------

cette methode est super simple, et fonctionne toujours, apres il faut quand meme lire l'entete si tu veux connaitre la taille de l'image et son format de pixel (8, 16, 24, 32 bits) mais si ton format d'image est predefini et que tu le connais, tu peux faire ca :)
0
cs_titio Messages postés 6 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 mars 2006
15 mai 2005 à 12:05
En effet, j'avais aussi essayé cette methode, mais dans ce cas, comment fait on pour l'afficher ??
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
15 mai 2005 à 12:23
tu peux toujours utiliser caa :
http://www.cppfrance.com/code.aspx?id=19337

:)
0
Rejoignez-nous