public void ApplyFilters(string outputName, string filter) { uint i, j; byte redCopy, greenCopy, blueCopy, alphaCopy, flag = 0; Pixels extendedPic = new Pixels(Dheader.Height + 2, Dheader.Width + 2); Pixels extendedPicCopy = new Pixels(Dheader.Height + 2, Dheader.Width + 2); for (i = 0; i < Dheader.Height + 2; ++i) { for (j = 0; j < Dheader.Width + 2; ++j) { extendedPicCopy.Arr[i][j] = new Pixel(); extendedPic.Arr[i][j] = new Pixel(); } } for (i = 0; i < Dheader.Height; i++) { extendedPic.Arr[i + 1][0] = Pixels[i][0]; extendedPic.Arr[i + 1][Dheader.Width + 1] = Pixels[i][Dheader.Width - 1]; for (j = 0; j < Dheader.Width; j++) { extendedPic.Arr[i + 1][j + 1] = Pixels[i][j]; } } for (j = 0; j < Dheader.Width + 2; j++) { extendedPic.Arr[0][j] = extendedPic.Arr[1][j]; extendedPic.Arr[Dheader.Height + 1][j] = extendedPic.Arr[Dheader.Height][j]; } for (i = 0; i < Dheader.Height + 2; ++i) { for (j = 0; j < Dheader.Width + 2; ++j) { redCopy = extendedPic.Arr[i][j].Red; // I did it because i wanted not reference copy of the array but copy of its args blueCopy = extendedPic.Arr[i][j].Blue; greenCopy = extendedPic.Arr[i][j].Green; alphaCopy = extendedPic.Arr[i][j].Alpha; extendedPicCopy.Arr[i][j].Red = redCopy; extendedPicCopy.Arr[i][j].Blue = blueCopy; extendedPicCopy.Arr[i][j].Green = greenCopy; extendedPicCopy.Arr[i][j].Alpha = alphaCopy; } } for (i = 1; i <= Dheader.Height; i++) { for (j = 1; j <= Dheader.Width; j++) { if (filter == "Median") { extendedPic.MedianFilter(extendedPicCopy.Arr, (int)i, (int)j); } else if (filter == "Gauss") { extendedPic.GaussFilter3x3(extendedPicCopy.Arr, (int)i, (int)j); } else if (filter == "SobelX") { extendedPic.SobelX(extendedPicCopy.Arr, (int)i, (int)j); } else if (filter == "SobelY") { extendedPic.SobelY(extendedPicCopy.Arr, (int)i, (int)j); } else if (filter == "GrayScale") { extendedPic.Arr[i][j].GrayScale(); } else { Console.WriteLine("Incorrect name of filter"); flag = 1; break; } } if (flag == 1) { break; } } for (i = 1; i < Dheader.Height + 1; ++i) { for (j = 1; j < Dheader.Width + 1; ++j) { this.Pixels[i - 1][j - 1] = extendedPic.Arr[i][j]; } } this.WriteImage(outputName); }