Transformer un tableau 2d en image bitmap

gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004 - 29 nov. 2003 à 11:01
gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004 - 29 nov. 2003 à 13:29
Bonjour a tous, voilà mon problème, je suis en train de mettre en place une méthode de comparaison de signature manuscrites. Cette méthode s applique sur la distance élastique (à titre d 'info). Mon problème est que j aimerai obtenir une image bitmap à partir de mon tableau 2d, celui ci represente un graphique correspondant à la ressemblance de deux signature. Malheureusement il y a un prb, soit au niveau de mes en têtes, soit dans ma déclaration. Qq 1 pourrait il m aider. Merci

BOOL CSignature::SaveBitmapstruct(char *nom,int **image,int NBL,int NBC)
{
FILE * pfile=fopen("test.txt","w+");
for (int i=0;i<NBL;i++)
{for (int j=0;j<NBC;j++)
{
fprintf(pfile,"%d\t",image[i][j]);
}
fprintf(pfile,"\n");
}
fprintf(pfile,"\n");fprintf(pfile,"\n");fprintf(pfile,"\n");

fclose(pfile);

CFile f;
// int h,l,dim;
BITMAP bitmap1;
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER info;
unsigned char* ptrData1= new unsigned char[NBL*NBC*3];

// BITMAPINFOHEADER bmi;
info.biSize = sizeof(BITMAPINFOHEADER); // Size of structure
info.biWidth = NBC+1; // Bitmaps width in pixels
info.biHeight = NBL+1; // Bitmaps height n pixels
info.biPlanes = 1; // Number of planes in the image
info.biBitCount = 32; // The number of bits per pixel
info.biCompression = BI_RGB; // The type of compression used
info.biSizeImage = 0; // The size of the image in bytes
info.biXPelsPerMeter = 0; // Horizontal resolution
info.biYPelsPerMeter = 0; // Veritical resolution
info.biClrUsed = 0; // Number of colors actually used
info.biClrImportant = 0; // Colors most important
//mBMI = info;


bmfh.bfType 0x4d42; // 0x4d42 'BM'
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfOffBits = 0x36;
/*
info.biSize = sizeof ( BITMAPINFOHEADER );
info.biWidth = NBC;
info.biHeight = NBL;
info.biPlanes = 1;
info.biBitCount = 24;
info.biCompression = BI_RGB;
info.biSizeImage = 0;
info.biXPelsPerMeter = 0x0ec4;
info.biYPelsPerMeter = 0x0ec4;
info.biClrUsed = 0;
info.biClrImportant = 0;
*/
f.Open(nom,CFile::modeCreate | CFile::modeWrite);
f.Write(&bmfh,sizeof ( BITMAPFILEHEADER ));
f.Write(&info,sizeof ( BITMAPINFOHEADER ));

for( i=NBL-1;i>-1;i--)
for(int j=NBC-1;j>-1;j--)
{
*(ptrData1)=(unsigned char)image[i][j];
ptrData1++;
*(ptrData1)=(unsigned char)image[i][j];
ptrData1++;
*(ptrData1)=(unsigned char)image[i][j];
ptrData1++;

}

f.Write(ptrData1,NBL*NBC*3*sizeof(unsigned char));

f.Close();
// f.Write(input.get_ptrpixel(),bitmap1.bmHeight*bitmap1.bmWidth*3*sizeof(char));
/*for (i=0;i<NBL;i++)
for (j=0;j<NBC;j++)
fwrite(&image[i][j],1,1,fich);
fich->Close();*/
return true;
}

5 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 nov. 2003 à 11:08
tu n'a pas dit quel est ton probleme, mais aparament tu ne prend pas en compte le fait que chaque ligne doit etre ecrite par mot de 32bits, en gros si le nombre d'octet par ligne n'est pas un multiple de 4 ==> probleme!
enfin tu peut l'eviter si la largeur en pixel de ton bmp est un multiple de 4
0
gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004
29 nov. 2003 à 11:17
merci pour l info j ai essayé de consider la transparence. J ai essayé mais la fonction se passe sans pb mais l image n est pas disponible ou ne peut pas etre ouverte. Donc en bred je cherche une methode qui marche pour convertir un tableau 2d en image bitmap, car la mienne fait que planté et ca m ennerve.
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
29 nov. 2003 à 12:03
en fait c'est pas la transparence, c'est juste que losrque tu visualize une image, chaque ligne est lue par mot de 32 bits
par exemple si tu a une image bmp 24 bits de 15*10 (largeur=15) on a alors 15*3=45 octets par lignes, ce n'est pas un multiple de 4, tu prend alors le plus proches par exces, c'est a dire 48 . il manque donc 48-45=3 octets pour finir la ligne, tu bourre dons avec 3 octets a 0('\0' ou char(0))

et qd tu essay avec de faire un image dont la largeur est un multiple de 4(12*15 par ex) ca devrai marcher, sinon regarde du coté de l'entete
0
gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004
29 nov. 2003 à 12:07
ok, j avais pas penser au bourrage, je te remercie et je vais essayer de suite. Merci pour l info
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gyzmo1 Messages postés 13 Date d'inscription samedi 29 novembre 2003 Statut Membre Dernière intervention 9 juillet 2004
29 nov. 2003 à 13:29
merci djl, la bitmap peut être ouverte dorénavant, maintenant j ai plus qu a résoudre mon problème d'enregistrement des pixels car il sort pas l image désirée. Mais ca va le faire. encore merci.
0
Rejoignez-nous