Wenn Sie den CImg Kopf schauen, sehen Sie, dass dieser Code ist in der Tat, ein Makro, das in Thunk nach unten:
#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)
Was bedeutet, dass Sie die folgenden Schleifen haben:
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) {
}
jetzt also, was wollen Sie wahrscheinlich entweder die x, y und z-Koordinaten, oder besser gesagt, der Zeiger in den Datenbezug tun, wie Sie durch wie
cimg_library::CImg<float> image;
//assign, etc
float* ptr = image->ptr();
cimg_forXYZ(S, x, y, z){
*ptr = *ptr + 10;
++ptr;
}
Schritt
Ich empfehle Ihnen, den CImg-Header zu lesen; es ist ziemlich elegant. Sie erhalten viele Funktionen "kostenlos".
Danke, das hat ein paar Dinge geklärt. Trotzdem scheine ich nicht in Ordnung/inkonsistente Ergebnisse zu bekommen .. hmm vielleicht sollte ich eine andere Frage – zenna
falsche oder inkonsistente Ergebnisse veröffentlichen als Folge der Bittiefe Probleme passieren kann. Zum Beispiel könnte die Multiplikation leicht tun seltsame und schlechte Dinge Sie mit etwas anderem als float Bilder (dh Byte Bilder werden leicht überlaufen, wenn du nicht aufpasst). – mmr