51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
void modifierImage(char *nomFichier) {
|
|
int pixel, largeur, hauteur, intensiteMax;
|
|
char commentaire[256],enTete[3];
|
|
FILE *fichier = fopen(nomFichier, "r+");
|
|
|
|
if (fichier == NULL) {
|
|
fprintf(stderr,"Impossible d'ouvrir le fichier !");
|
|
return;
|
|
}
|
|
|
|
/* Lire l'en-tête */
|
|
fscanf(fichier, "%2s", enTete);
|
|
|
|
if (enTete[0] != 'P' || enTete[1] != '2') {
|
|
printf("Le fichier n'est pas au format PPM ASCII.\n");
|
|
fclose(fichier);
|
|
return;
|
|
}
|
|
|
|
/* Ignorer les commentaires s'il y en a*/
|
|
while (fgetc(fichier) == '#') {
|
|
fgets(commentaire, sizeof(commentaire), fichier);
|
|
}
|
|
|
|
/* Lire les dimensions et l'intensité maximale*/
|
|
fscanf(fichier, "%d %d %d", &largeur, &hauteur, &intensiteMax);
|
|
|
|
/* Modifier les pixels du message en blanc*/
|
|
fseek(fichier, ftell(fichier), SEEK_SET); /* Revenir au début des données d'image*/
|
|
|
|
while ((pixel = fgetc(fichier)) != EOF) {
|
|
/* Modifier uniquement les pixels correspondant au message (intensité 3)*/
|
|
if (pixel == 3) {
|
|
fseek(fichier, -1, SEEK_CUR);
|
|
fprintf(fichier, "5 ");
|
|
}
|
|
}
|
|
|
|
fclose(fichier);
|
|
}
|
|
|
|
int main(void) {
|
|
char nomFichier[] = "image.pgm";
|
|
modifierImage(nomFichier);
|
|
printf("Modification terminée avec succès.\n");
|
|
|
|
return EXIT_SUCCESS;
|
|
} |