private Bitmap Processar(string arquivo, double[,] mascara) { //carregando a imagem Bitmap bm = new Bitmap(arquivo); //novo bitmap Bitmap bmn = new Bitmap(bm); //definindo a cor Color color; //posição da mediana int valorMediaPonderada = 0; int valorPonderador = 0; //base para calculo int[,] mascaraCalculo = new int[mascara.GetLength(0), Mascara.GetLength(1)]; //indice de maximo matricial int mascaraX = (int)Math.Floor((decimal)mascara.GetLength(0) / 2); int mascaraY = (int)Math.Floor((decimal)mascara.GetLength(1) / 2); //criando novo bitmap for (int x = mascaraX; x < bm.Width - (mascaraX + 1); x++) { for (int y = mascaraY; y < bm.Height - (mascaraY + 1); y++) { for (int s = (-1) * mascaraX; s <= (1) * mascaraX; s++) { for (int t = (-1) * mascaraY; t <= (1) * mascaraY; t++) { mascaraCalculo[s + mascaraX, t + mascaraY] = (int)Math.Floor((mascara[s + mascaraX, t + mascaraY] * bm.GetPixel(x - s, y - t).ToArgb())); valorPonderador += bm.GetPixel(x - s, y - t).ToArgb(); //Console.WriteLine(string.Format("({0},{1}) => {2}",(s + mascaraX),(t + mascaraY), mascara[s + mascaraX, t + mascaraY])); } } valorMediaPonderada = (int)Math.Pow(MascaraMediaPonderada(mascaraCalculo, valorPonderador), 2); if (valorMediaPonderada < valorPonderador) { //color = Color.Transparent; color = Color.FromArgb(valorMediaPonderada); } else { color = Color.Black; } //color = Color.FromArgb(valorMediaPonderada); bmn.SetPixel(x, y, color); valorPonderador = 0; } } return(bmn); }