Bonjour,
Merci
Version imprimable
Bonjour,
Merci
Salut,
En gros, ce qu'il faut, c'est:
parcourrir toutes les lignes de l'images, en passant chaque fois N lignes et
parcourrir chaque fois ces lignes en passant N pixel pour
pouvoir prendre le pavé de N*N pixel et calculer la moyenne de couleur
En considérant (par simplicité) une image prenant la forme d'un tableau de caractères à deux dimentions "C style" du genre de char image[hauteur][largeur], on pourrait envisager un code proche de
Evidemment, il faudra envisager d'adapter le code à la structure utilisée pour les images ;)Code:
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 ;)