|
|
|
|
Bonjour,
je développe un programme en C pour traite des images bmp, voici le code de la fonction qui plante :
void rgbSurface(FILE* surface1,unsigned int sizeFile)
{
char nfile[]="",buffer;
FILE *filebmp = NULL;
int i=0,a=0;
printf("entrez le nom du fichier que vous voulez coller: \n");
scanf("%s",nfile);
filebmp = fopen(nfile,"rb+");
printf("choisissez un facteur d'opacite entre 0 (totalement transparant) et 100 (totalement opaque) : /n");
scanf("%d",&a);
a = a/100;
fseek(surface1,0x36,SEEK_SET);
fseek(filebmp,0x36,SEEK_SET);
for(i=0;i<sizeFile-54;i++)
{
buffer=(surface1[i]*a)+(filebmp[i]*(1-a));
fwrite(&buffer,sizeof(BYTE),1,surface1);
}
fclose(filebmp);
}
lecturebmp.c: In function ‘rgbSurface’: lecturebmp.c:55: erreur: invalid operands to binary * (have ‘FILE’ and ‘int’) lecturebmp.c:55: erreur: invalid operands to binary * (have ‘FILE’ and ‘int’)
void bmpreverse(FILE* bmpfile, unsigned int sizeFile) {
char buffer[48] = {0};
int i=0;
fseek(bmpfile,0x36,SEEK_SET);
//0x36 egal la taille de l'entete d'un fichier bmp.
for(i=0;i<sizeFile - 54;i++) {
//54 = 0x36
fread((long*)buffer[i], sizeof(BYTE),1,bmpfile);
}
fseek(bmpfile,54,SEEK_SET);
fwrite(buffer,sizeof(char),sizeFile-54,bmpfile);
}
Configuration: Linux Firefox 3.0.10
char nfile[]="";
|
Salut,
|
Merci beaucoup a vous deux mon code compile maintenant parfaitement, mais j'ai maintenant un problème avec la variable y, en effet lorsque je l'observe avec gdb elle devrait changer de valeur a chaque tour de boucle or elle vaut -1 au premier tour et 0 pendant tous les autres pourtant je n'ai pas ce problème avec la variable x.
int rgbSurface(FILE* surface1,unsigned int sizeFile)
{
char nfile[30]="",x=0,y=0,buf=0;
FILE *filebmp = NULL;
int i=0,a=0;
unsigned int sizebmp2=0;
printf("entrez le nom du fichier que vous voulez coller: \n");
scanf("%s",nfile);
filebmp = fopen(nfile,"rb+");
if(filebmp==NULL)
return 0;
sizebmp2=readSizeFi(filebmp);
printf("choisissez un facteur d'opacite entre 0 (totalement transparant) et 100 (totalement opaque) : /n");
scanf("%d",&a);
a = a/100;
fseek(surface1,0x36,SEEK_SET);
fseek(filebmp,0x36,SEEK_SET);
for(i=0;i<sizebmp2-54;i++)
{
fread(&x,sizeof(BYTE),1,surface1); //x change de manière normal a chaque tour de boucle .
fread(&y,sizeof(BYTE),1,filebmp); //y lui vaut -1 au premier tour puis 0 a chaque autre.
buf=(x*a)+(y*(1-a));
fwrite(&buf,sizeof(BYTE),1,surface1);
}
fclose(filebmp);
return 0;
}
je devrai peut être tester la valeur de retour des fonctions fread mais même si c'est vraiment la le problème je ne saurais pas le résoudre :-( est ce que vous pouvez m'éclaircir sur ce problème. merci en avance =p. |