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 39 40 41 42 43 44 45 46 47 48 49 50
| fixed (int* ptrFiltreFixed = filtre.matrix)
{
Byte* ptrBmpInWithBorder = ptrBmpInWithBorderFixed + widthBmpInWithBorder + 1;
Byte* ptrBmpOut = ptrBmpOutFixed;
int *ptrFiltre = ptrFiltreFixed;
Byte* ptrValPxHaut;
Byte* ptrValPxBas;
Byte* ptrValPxGauche;
Byte* ptrValPxDroit;
Byte* ptrValPxHautGauche;
Byte* ptrValPxHautDroit;
Byte* ptrValPxBasGauche;
Byte* ptrValPxBasDroit;
for (int i = 1; i < heightBmpInWithBorder - 1; i++)
{
for (int j = 1; j < widthBmpInWithBorder - 1; j++)
{
// On repositionne correctement les pointeurs
ptrBmpInWithBorder = ptrBmpInWithBorderFixed + ((i * widthBmpInWithBorder) + j);
ptrBmpOut = ptrBmpOutFixed + (((i - 1) * widthOut) + (j - 1));
// On place les pointeurs sur les valeurs de voisinnage
ptrValPxHaut = ptrBmpInWithBorder - widthBmpInWithBorder;//1
ptrValPxBas = ptrBmpInWithBorder + widthBmpInWithBorder;//2
ptrValPxGauche = ptrBmpInWithBorder - 1;//3
ptrValPxDroit = ptrBmpInWithBorder + 1;//4
ptrValPxHautGauche = ptrValPxHaut - 1;//5
ptrValPxHautDroit = ptrValPxHaut + 1;//6
ptrValPxBasGauche = ptrValPxBas - 1;//7
ptrValPxBasDroit = ptrValPxBas + 1;//8
valTemp =
ptrFiltre[0] * *ptrValPxHautGauche + *ptrFiltre++ * *ptrValPxHaut + *ptrFiltre++ * *ptrValPxHautDroit +
*ptrFiltre + 3 * *ptrValPxGauche + *ptrFiltre + 4 * *ptrBmpInWithBorder + *ptrFiltre+5 * *ptrValPxDroit +
*ptrFiltre + 6 * *ptrValPxBasGauche + *ptrFiltre + 7 * *ptrValPxBas + *ptrFiltre+8 * *ptrValPxBasDroit;$
et la structure :
public struct struFiltre
{
internal int[] matrix;
internal int facteur;
internal int offset;
}
filtre.matrix = new int[9] { 1, 1, 1, 1, -8, 1, 1, 1, 1 }; |
Partager