Négatif d'une image en c

Fermé
wqazerty - 14 mai 2008 à 11:26
 wqazerty - 14 mai 2008 à 17:44
Bonjour,
j'essaye de programmer le negatif d'une image en c et je comprends sa marche pas. En effet quand j'applique 2 fois le programme je ne retrouve pas l'image originale.
voici le code (les 54 premiers octets sont des entetes donc on s'en fou et apres ce sont les couleurs code de gauche à droite et haut en bas)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char * argv[]) {

FILE *infile;
infile=fopen(argv[1],"r+");
int i;
i=0;

int p=1;
char j[1];

for(i=0;i<54;i++) {
fread(j,1,1,infile);
}

while (p!=0) {
p=fread(j,sizeof(char),1,infile);
*j=-*j;
fwrite(j,sizeof(char),1,infile);
}
fclose(infile);
return 0;
}
A voir également:

8 réponses

magicwill Messages postés 93 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 juillet 2008 3
14 mai 2008 à 11:36
Salut;

Et quand tu fais un printf, ca donne quoi comme valeurs pour j?
Pourquoi déclarer char j[1] plutot que char j...? tu enlèverai les pointeur que tu utilises...

A+
0
j doit obligatoirement être un pointeur pour pouvoir utiliser fread et fwrite.
quand je fais un print f *j sont des valeurs comprises en 127 et -127.
0
le premier qui repond gagne une sucette
0
help
0

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

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
14 mai 2008 à 15:22
à mon avis, ça viens de l'algorithme.
Pour moi du négatif, c'est :
Jmax-j
donc souvent c'est 255-j, avec des valeurs comprises entre 0 (noir) et 255 (blanc)
la valeurs en binaire sont peut être des entiers non signé, et si tu utilise le complément à 2 pour écrire le résultat...
Conseil, utilise unsigned char à la place de char et 255-j plutôt que j=-j.
0
sa marche toujours pas

ouin!!!!
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
14 mai 2008 à 15:59
toujours un problème d'algorithme. tu fait un fread suivie d'un fwrite sans remettre le curseur d'écriture en place.
regarde du coté de fseek().
ça doit ressembler à quelque chose du genre :
fseek(infile,-1,SEEK_CUR);
0
ok c bon sa marche merci
0