- #include <stdio.h>
- #include <stdlib.h>
-
- unsigned char ** allocation(int NBL, int NBC)
- {
- int i, j;
- unsigned char **image;
-
- image = (unsigned char**)calloc(NBL,sizeof(unsigned char **));
- if (image == NULL)
- return(NULL);
-
- for (i=0;i<NBL;i++)
- {
- image[i] = (unsigned char*)calloc(NBC,sizeof(unsigned char));
- if (image[i] == NULL)
- {
- for (j=0;j<i;j++)
- free(image[j]);
-
- free(image);
- return(NULL);
- }
- }
-
- return(image);
- }
-
- void desallocation(unsigned char **image, int NBL)
- {
- int i;
-
- if (image == NULL)
- exit(0);
-
- for (i=0;i<NBL;i++)
- free(image[i]);
-
- free(image);
- }
-
- void LireImageRAW(unsigned char** image, int NBL, int NBC)
- {
- char nom_image[256];
- FILE * fic_image;
- int i, j;
-
- getchar();
- printf("Nom de l'image a ouvrir : \n");
- gets(nom_image);
-
- fic_image = fopen(nom_image,"rb");
-
- if (fic_image == NULL)
- {
- printf("Erreur a l'ouverture de l'image ...\n");
- exit(0);
- }
- else
- printf("Image ouverte avec succes ...\n");
-
- for(i=0;i<NBL;i++)
- for(j=0;j<NBC;j++)
- fread(&image[i][j],1,1,fic_image);
-
- fclose(fic_image);
- }
-
- void EcrireImageRAW(unsigned char** image, int NBL, int NBC)
- {
- char nom_image[256];
- FILE * fic_image;
- int i, j;
-
- getchar();
- printf("Nom de l'image a ecrire : \n");
- gets(nom_image);
-
- fic_image = fopen(nom_image,"wb");
-
- if (fic_image == NULL)
- {
- printf("Erreur a la creation de l'image ...\n");
- exit(0);
- }
- else
- printf("Image cree avec succes ...\n");
-
- for(i=0;i<NBL;i++)
- for(j=0;j<NBC;j++)
- fwrite(&image[i][j],1,1,fic_image);
-
- fclose(fic_image);
- }
-
- void SeuilImageRAW(unsigned char** image, int NBL, int NBC, int seuil)
- {
- int i, j;
-
- for(i=0;i<NBL;i++)
- for(j=0;j<NBC;j++)
- {
- if (image[i][j] < seuil)
- image[i][j] = 0;
- else
- image[i][j] = 255;
- }
- }
-
- int main()
- {
- unsigned char ** image;
- int NBL, NBC, seuil;
-
- printf("Nombre de lignes de l'image :\n");
- scanf("%d",&NBL);
- printf("Nombre de colonnes de l'image :\n");
- scanf("%d",&NBC);
-
- image = allocation(NBL,NBC);
-
- if (image != NULL)
- {
- LireImageRAW(image,NBL,NBC);
-
- printf("Seuil a appliquer : \n");
- scanf("%d",&seuil);
-
- SeuilImageRAW(image,NBL,NBC,seuil);
- EcrireImageRAW(image,NBL,NBC);
- desallocation(image,NBL);
- }
- else
- {
- printf("Erreur lors de l'allocation memoire! Sortie du programme.\n");
- return 1;
- }
-
-
- return 0;
- }
#include <stdio.h>
#include <stdlib.h>
unsigned char ** allocation(int NBL, int NBC)
{
int i, j;
unsigned char **image;
image = (unsigned char**)calloc(NBL,sizeof(unsigned char **));
if (image == NULL)
return(NULL);
for (i=0;i<NBL;i++)
{
image[i] = (unsigned char*)calloc(NBC,sizeof(unsigned char));
if (image[i] == NULL)
{
for (j=0;j<i;j++)
free(image[j]);
free(image);
return(NULL);
}
}
return(image);
}
void desallocation(unsigned char **image, int NBL)
{
int i;
if (image == NULL)
exit(0);
for (i=0;i<NBL;i++)
free(image[i]);
free(image);
}
void LireImageRAW(unsigned char** image, int NBL, int NBC)
{
char nom_image[256];
FILE * fic_image;
int i, j;
getchar();
printf("Nom de l'image a ouvrir : \n");
gets(nom_image);
fic_image = fopen(nom_image,"rb");
if (fic_image == NULL)
{
printf("Erreur a l'ouverture de l'image ...\n");
exit(0);
}
else
printf("Image ouverte avec succes ...\n");
for(i=0;i<NBL;i++)
for(j=0;j<NBC;j++)
fread(&image[i][j],1,1,fic_image);
fclose(fic_image);
}
void EcrireImageRAW(unsigned char** image, int NBL, int NBC)
{
char nom_image[256];
FILE * fic_image;
int i, j;
getchar();
printf("Nom de l'image a ecrire : \n");
gets(nom_image);
fic_image = fopen(nom_image,"wb");
if (fic_image == NULL)
{
printf("Erreur a la creation de l'image ...\n");
exit(0);
}
else
printf("Image cree avec succes ...\n");
for(i=0;i<NBL;i++)
for(j=0;j<NBC;j++)
fwrite(&image[i][j],1,1,fic_image);
fclose(fic_image);
}
void SeuilImageRAW(unsigned char** image, int NBL, int NBC, int seuil)
{
int i, j;
for(i=0;i<NBL;i++)
for(j=0;j<NBC;j++)
{
if (image[i][j] < seuil)
image[i][j] = 0;
else
image[i][j] = 255;
}
}
int main()
{
unsigned char ** image;
int NBL, NBC, seuil;
printf("Nombre de lignes de l'image :\n");
scanf("%d",&NBL);
printf("Nombre de colonnes de l'image :\n");
scanf("%d",&NBC);
image = allocation(NBL,NBC);
if (image != NULL)
{
LireImageRAW(image,NBL,NBC);
printf("Seuil a appliquer : \n");
scanf("%d",&seuil);
SeuilImageRAW(image,NBL,NBC,seuil);
EcrireImageRAW(image,NBL,NBC);
desallocation(image,NBL);
}
else
{
printf("Erreur lors de l'allocation memoire! Sortie du programme.\n");
return 1;
}
return 0;
}