Witam
Mam pewien problem z polami w klasie, ponieważ tworzę operacje morfologiczne (w tym przypadku erozję) i wykorzystuje do tego macierz.
class Erode
{
int[,] ImageMatrix { get; set; }
int[,] TempMatrix { get; set; }
int width;
int height;
public Erode(int[,] _ImgMatrix, int _width, int _height)
{
this.width = _width;
this.height = _height;
this.ImageMatrix = new int[width, height];
this.ImageMatrix = _ImgMatrix;
}
public int[,] Eroding()
{
TempMatrix = new int[width, height];
TempMatrix = ImageMatrix;
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
TempMatrix[i, j] = MinAdj(i, j);
}
}
int a = ImageMatrix[5, 5];
return TempMatrix;
}
public int MinAdj(int nCol, int nRow)
{
int min = ImageMatrix[nCol,nRow];
for (int i = Math.Max(0, nCol - 1); i <= Math.Min(width - 1, nCol + 1); i++)
{
for (int j = Math.Max(0, nRow - 1); j <= Math.Min(height - 1, nRow + 1); j++)
{
if ((nCol > 0 && nRow > 0) && (nCol < 4 && nRow < 4))
{
if (min > ImageMatrix[i, j])
min = ImageMatrix[i, j];
}
else
{
if (min > ImageMatrix[i, j])
min = ImageMatrix[i, j];
}
}
}
return min;
}
}
Klasa przyjmuje przez konstruktor przyjmuje macierz ImageMatrix o danej wysokości i szerokości i tu jest ok. Nie chcę, żeby ta macierz ulegała zmianie, więc utworzyłem macierz tymczasową TempMatrix, która na początku jest taka sama jak ImageMatrix ale ma się zmodyfikować i ma być zwrócona przez metodę Eroding(). Wszystko byłoby ok, gdyby macierz ImageMatrix nie ulegała zmianie.
Sprawdzałem debbugerem na linii:
TempMatrix = ImageMatrix; oraz
int a = ImageMatrix[5, 5]; //tymczasowo dodalem taka zmienna
i ImageMatrix z drugiej linii jest inna jak ta z pierwszej linii
Próbowałem też wpakować ImageMatrix do funkcji i zwracać ale też jej wartość się zmienia.
Nic do niej nie przypisuje, więc skąd zmieniają się wartości i jak temu zapobiec?