Si vous regardez dans l'en-tête CImg, vous verrez que ce code est, en fait, une macro qui Thunks en:
#define cimg_forXY(img,x,y) cimg_forY(img,y) cimg_forX(img,x)
#define cimg_forX(img,x) for (int x=0; x<(int)((img).width); ++x)
#define cimg_forY(img,y) for (int y=0; y<(int)((img).height); ++y)
#define cimg_forZ(img,z) for (int z=0; z<(int)((img).depth); ++z)
#define cimg_forXYZ(img,x,y,z) cimg_forZ(img,z) cimg_forXY(img,x,y)
Ce qui signifie que vous aurez les boucles suivantes:
for (int z=0; z<(int)((img).depth); ++z)
for (int y=0; y<(int)((img).height); ++y)
for (int x=0; x<(int)((img).width); ++x) {
}
donc, maintenant, ce que vous voulez sans doute faire référence est soit x, y, z et les coordonnées, ou mieux, le pointeur dans les données que vous franchissez, comme
cimg_library::CImg<float> image;
//assign, etc
float* ptr = image->ptr();
cimg_forXYZ(S, x, y, z){
*ptr = *ptr + 10;
++ptr;
}
Je vous encourage à lire l'en-tête CImg; c'est assez élégant. Vous obtiendrez beaucoup de fonctionnalités 'gratuitement'.
Merci, cela a éclairci quelques choses. Pourtant, je semble obtenir des résultats incorrects/incohérents .. hmm peut-être que je devrais poster une autre question – zenna
des résultats incorrects ou incohérents peuvent se produire en raison de problèmes de profondeur de bit. Par exemple, cette multiplication pourrait facilement vous faire des choses étranges et mauvaises avec autre chose que des images flottantes (c.-à-d., Les images d'octets dépasseront facilement si vous ne faites pas attention). – mmr