1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
/******************************************************************************/
/* retailler l'image */
/*----------------------------------------------------------------------------*/
/* Fonction : Fonction qui découpe l'image aux dimensions PetitX*PetitY */
/* */
/* Entrées : PetitX => Longueur de l'image après découpage */
/* PetitY => Largeur de l'image après découpage */
/* GrandX => Largeur de l'image avant découpage */
/* GrandY => Largeur de l'image avant découpage */
/* buf => Tampon contenant l'image au format MIL_ID */
/* Sortie : Pointeur (float) vers l'adresse contenant l'image */
/* */
/******************************************************************************/
float *retailler(int PetitX, int PetitY, int GrandX, int GrandY, MIL_ID *buf)
{
int deltaX; //'Marges' quand la petite image est centrée sur la grande
int deltaY;
int i,j; //Indices de boucle
float *pixelfloat; //Pointeur pour l'image en float
unsigned char *pixel,*pixel_i; //Pointeur pour l'image en char
//Allocation de la mémoire pour les deux images
pixel = (unsigned char *)malloc(GrandX*GrandY); //Cette ligne fait planter le prog !
pixel_i = pixel; //pixel_i pour garder l'adresse initiale
pixelfloat = (float*)malloc(PetitX*PetitY*sizeof(float));
//on place la pointeur de char sur l'adresse de début de l'image en Mil_id
pixel = (unsigned char *)buf;
//Calcul des marges
deltaX = (GrandX-PetitX)/2;
deltaY = (GrandY-PetitY)/2;
for(j=0;j<GrandY;j++)
{
for(i=0;i<GrandX;i++)
{ //Si le pixel lu dans la grande image n'est pas dans les marges
if(i>=deltaX && i<(PetitX + deltaX) && j>=deltaY && j<(PetitY + deltaY))
{
//On l'ajoute à la petite image
*pixelfloat = (float)*pixel;
//On passe au pixel suivant sur la petite image
pixelfloat++;
}
//Dans tous les cas, on doit lire le pixel suivant sur la grande image
pixel++;
}
}
//libération mémoire
free(pixel_i);
//Renvoi de l'image en 512*512 float
return(pixelfloat - PetitX*PetitY);
} |