Pour mieux comprendre cela, nous avons besoin de plus de contexte:
// ....
if (sstep == dstep && !submat && continuous)
{
uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());
MemoryHelper.CopyMemory(pDst, pSrc, imageSize);
}
// ...
Ok, donc c'est un code qui traite de la copie de la mémoire brute contenant les données de pixels.
Ces déclarations sont exécutées que lorsque:
sstep == dstep
- La taille de l'étape (décalage entre deux lignes consécutives dans la mémoire) est le même pour la source et la destination
!submat
- L'image source est non une sous-matrice (ce qui signifie que c'est une image complète, pas une vue d'une plus grande, et donc data == datastart
).
continuous
- La matrice source est continue (pas de remplissage entre les lignes).
Pour résumer, il ne fonctionne que lorsque la matrice de pixels sous-jacent est un morceau contigu de mémoire datastart
-dataend
. Donc, cette expression calcule le nombre d'octets entre les deux pointeurs src.Data
et src.DataEnd
.
Ces deux points ressemblent à des pointeurs, l'un vers le début, l'autre vers la position juste après la fin de la matrice de pixels. Le calcul de la différence vous donne la taille du tableau. –
Mais pas la taille de la partie du tableau contenant l'image? – dumbledad
Il manque un peu de contexte, l'instruction 'if' sur la ligne 401. Elle est appelée uniquement lorsque l'image n'est pas une sous-matrice (c'est-à-dire' data == datastart') et lorsqu'elle est continue. Quand ce n'est pas juste un gros morceau contigu, il va et copie rangée par rangée. –