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
|
/* il faut déclarer une structure finale pour l'image résultante
mais il faut en calculer la taille: 1pixels de plus que hauteur/N et que
largeur/N, sauf si N est un diviseur entier de hauteur et ou de largeur*/
int largtemp=(largeur%N==0)? largeur/N:largeur/N+1;
int hauttemp=(hauteur%N==0)? hauteur/N:hauteur/N+1;
char **final=new *char[hauttemp];
for(unsigned int i=0;i<largtemp;i++)
final[i]=new char[largtemp;]
/* comme on a le nombre d'itérations pour la hauteur et la largeur, autant
les utiliser...*/
// on parcourre la hauteur
for(int y=0;y<hauttemp;y++)
{
//on parcourre la largeur
for(int x=0;x<largtemp;x++)
{
/* pour que la moyen du dernier pixel reste correcte, il est préférable
d'utiliser une boulce do...while pour parcourrir le pave ;) */
int total=0;
//on parcourre toutes les lignes du pave
int hcalcul=0;
do
{
//et toutes les colones du pave
int lcalcul=0;
do
{
total+=image[y*N+hcalcul][x*N+lcalcul];
lcalcul++;
}while(x*N+lcalcul>largeur && lcalcul<N);
hcalcul++;
}while(y*N+hcalcul>hauteur && hcalcul<N);
// on fournit la moyen à l'image temporaire
final[y][x]=total/(hcalcul*lcalcul);
}
}
//fini ;) |
Partager