public static void Process(ImageProcessInfo info, Color[,] result) { int height = info.Colors.GetLength(0); int width = info.Colors.GetLength(1); //Color[,] result = new Color[height, width]; for (int x = info.StartPosition; x <= info.FinishPosition; x++) { for (int y = 0; y < width; y++) { double red = 0, green = 0, blue = 0; for (int i = 0; i < info.Filter.Size; i++) { for (int j = 0; j < info.Filter.Size; j++) { if ((x + i < height && y + j < width)) { var color = info.Colors[x + i, y + j]; red += color.R * info.Filter[i, j]; green += color.G * info.Filter[i, j]; blue += color.B * info.Filter[i, j]; } } } if (x < height && y < width) { result[x, y] = Color.FromArgb(255, Filter.Normalize(red, info.Filter), Filter.Normalize(green, info.Filter), Filter.Normalize(blue, info.Filter)); } } } //return result; }