Recherche format d'image le plus simple !!

cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007 - 6 mai 2004 à 12:52
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007 - 6 mai 2004 à 17:04
Bonjour,
je souhaite connaitre quel est le format d'image le plus simple a lire car en fait je veu récupérer une image en noir et blanc de 128 x 64 et voir pour chaque pixel est ce qu'il est blanc ou noir dc à 1 ou à 0.
BMP c pas trop compliqué mais pour les images en noir et blanc G pas trop compris comment ca marchait.
Alors si vous avez un autre format a me proposer ? Avec l'explication de la structure si possible, je suis preneur.
Sur ce, bon appetit !
@+
Ymerej

16 réponses

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
6 mai 2004 à 13:41
http://netpbm.sourceforge.net/doc/pbm.html

plus simple, ça va être dur...

// Ma participation à la saturation du net:
// http://hylvenir.free.fr
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 13:44
Merci mais ej vé en rester au bitmap pr le moment !
@+
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 13:46
oui mais alors quel soft te permet d'enregistrer une image au format PBM ?
0
mop666 Messages postés 46 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 27 février 2007
6 mai 2004 à 13:51
voila comment faire pour du noir et blanc (1 pixel = 1 bit)
le principe c est que si le bit est a 1, le pixel associe sera de la seconde couleur de la palette, sinon de la premiere...

d abord le header:

BITMAPFILEHEADER bmpFileHeader;
bmpFileHeader.bfType = 'MB';
bmpFileHeader.bfSize = sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER)+sizeof(RGBQUAD)*2+(width*_height)/8;
bmpFileHeader.bfReserved1 = 0;
bmpFileHeader.bfReserved2 = 0;
bmpFileHeader.bfOffBits = sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER)+sizeof(RGBQUAD)*2;

/*bfType c est le type
bfSize la taille complete du fichier en octet (8 pixel par octet)
bfOffBit le saut en octewt a faire jusqu aux donnees
*/

voila l info header:

BITMAPINFOHEADER bmpInfoHeader;
bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfoHeader.biWidth = width;
bmpInfoHeader.biHeight = height;
bmpInfoHeader.biPlanes =1;
bmpInfoHeader.biBitCount = 1;
bmpInfoHeader.biCompression = 0;
bmpInfoHeader.biSizeImage = (width * _height)/8;
bmpInfoHeader.biXPelsPerMeter = 0;
bmpInfoHeader.biYPelsPerMeter = 0;
bmpInfoHeader.biClrUsed = 2;
bmpInfoHeader.biClrImportant = 0;

/*
rien de complique ici
*/

ensuite tu ecrit la palette de deux couleurs:

RGBQUAD palette[2];

palette[0].rgbBlue = 255;
palette[0].rgbGreen = 255;
palette[0].rgbRed = 255;
palette[0].rgbReserved = 0;

palette[1].rgbBlue = 0;
palette[1].rgbGreen = 0;
palette[1].rgbRed = 0;
palette[1].rgbReserved = 0;

/*
ici la couleur des bits 0 est blanc et noir pour les bit 1
*/

tu ecrit par la fonction fwrite...

ensuite ecrire les donnees:
d abord la largeur de ton image doit etre un multiple de 32...
dans notre cas on va ecrire les donnees par paquet de 32....
on doit ecrire les donnees de bas en haut, et de gauche a droite...
si par exemple on se sert d'un UINT pour ecrire les donnees, tu dois mettre par exemple la valeur du premier pixel sur le bit fort (le numero 31) ensuite le suivant va en 30....etc...jusqu a 0 puis on rempli un autre uint....
seulement voila:tu dois pas ecrire l'UINT directement: il faut l'ecrire par paquets d'octets en sens invers c est a dire que tu ecriras d abord les 8 bits forts (au dessus du 24 eme) ensuite ceux au dessus du 16 eme, ensuite ceux au dessus du 8 eme et enfin ceux en 0 (utilise la fonction putc)
...
voila, ca marche pour moi sous visual c++ 6 ...
@++
0

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

Posez votre question
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
6 mai 2004 à 13:54
bon allez, soyons fous...

utilise XPM (t'auras même droit à plus de couleur)

The GIMP permet de transformer tes images dans de format
( en fait une chaine de caractères que tu peux inclure directement dans ton exe )

http://www.gromacs.org/documentation/reference_3.0/online/xpm.html
ou un autre lien de google

Ma participation à la saturation du net:
http://hylvenir.free.fr
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 14:00
Hylvenir >> Ta pas compris, je ne veu surtout pas m'embeter avec de la couleur puiskil n'y en aura pas !
Je veu juste coder le noir et blanc pr que ca soit + simple !

mop666 >> dc ce que tu ma donné comme code c bien pr une bitmap ?
Merci au fait !
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 14:02
En fait je ne me suis pas fé assez comprendre, excusez moi je reexplik :

Je ne veu pas coder une image mais lire un fichier image.
Qui plus ets mon image sera en noir et blanc dc je demandais simplement quel format allait le mieux.
C tt.
Dc le BMP a l'air sympa !
0
mop666 Messages postés 46 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 27 février 2007
6 mai 2004 à 14:06
ouic est cool le bmp...pour le lire t as qu a faire un fread sur un file header, puis un fread sur un info header, puis deux fread sur des RGBQUAD puis enfin tu lis tes donnees en prenant par 4 paquest d unsigned char (8 bits ) en les remettant dans l ordre:
le premier en haut, le deuxieme en dessous etc....enfin tu fais le chemin inverse quoi!
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 14:09
ok !
j'en etais arriver a la même conclusion en etudiant la structure du bmp !
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 14:11
Par contre, cette pahrase :
"tu lis tes donnees en prenant par 4 paquest d unsigned char (8 bits )"

tu peu la remettre ds le bon sens stp ?
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
6 mai 2004 à 14:16
As-tu au moins regardé le format XPM ?

Tu verras qu'il peut aussi ne contenir que 2 couleurs.
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 14:28
oui il a l'air interessant mais le truc c'est que je ne connais pas de logiciel qui permet d'enregistrer ou de convertir des images au format xpm.
A - que tu en conné ?
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 14:30
attend mais au fait il faut les redeclarer ses structures? Ou elle se trouve dans des librairies ?
Si oui merci de m'indiquer lesquelles car qd je fais
RGBQUAD palette[2];
dev c++ ne connait pas !
0
mop666 Messages postés 46 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 27 février 2007
6 mai 2004 à 16:55
http://membres.lycos.fr/crteknologies/programmation/ressources/bmp.html...la tu trouveras comment redefinir les structures des header et info header si tu les as pas...

sinon:
comme je te disais, les pixels sont places du coin en bas a gauche au coin en haut a droite en parcourant les lignes:

le petit truc chiant c est que dans chaque paquet de 4 octets il y a un swap de fait i.e quand tu lis il faut faire(apres avoir lu headers et color quad...)
unsigned long read;
unsigned char temp;

read = 0;
getc(file,&temp);
read = read | temp << 24;
getc(file,&temp);
read = read | temp << 16;
getc(file,&temp);
read = read | temp << 8;
getc(file,&temp);
read = read | temp ;

et les pixels seront dans l ordre du bit le plus fort au plus faible....
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
6 mai 2004 à 16:57
Enregistrer en XPM : The GIMP par exemple
Il doit y en avoir des plus "léger" pour le faire.
0
cs_ymerej Messages postés 165 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 octobre 2007
6 mai 2004 à 17:04
Merci t un chef !
0
Rejoignez-nous