static private void ApplyConvolution3x3(ref ImageData Img, ConvolutionMatrix m) { ImageData newImg = Img.Clone(); Color[,] pixelColor = new Color[3, 3]; int A, RedChannel, GreenChannel, BlueChannel; for (int y = 0; y < Img.Height - 2; y++) { for (int x = 0; x < Img.Width - 2; x++) { pixelColor[0, 0] = Img[x, y]; pixelColor[0, 1] = Img[x, y + 1]; pixelColor[0, 2] = Img[x, y + 2]; pixelColor[1, 0] = Img[x + 1, y]; pixelColor[1, 1] = Img[x + 1, y + 1]; pixelColor[1, 2] = Img[x + 1, y + 2]; pixelColor[2, 0] = Img[x + 2, y]; pixelColor[2, 1] = Img[x + 2, y + 1]; pixelColor[2, 2] = Img[x + 2, y + 2]; A = pixelColor[1, 1].A; RedChannel = (int)((((pixelColor[0, 0].R * m.Matrix[0, 0]) + (pixelColor[1, 0].R * m.Matrix[1, 0]) + (pixelColor[2, 0].R * m.Matrix[2, 0]) + (pixelColor[0, 1].R * m.Matrix[0, 1]) + (pixelColor[1, 1].R * m.Matrix[1, 1]) + (pixelColor[2, 1].R * m.Matrix[2, 1]) + (pixelColor[0, 2].R * m.Matrix[0, 2]) + (pixelColor[1, 2].R * m.Matrix[1, 2]) + (pixelColor[2, 2].R * m.Matrix[2, 2])) / m.Factor) + m.Offset); GreenChannel = (int)((((pixelColor[0, 0].G * m.Matrix[0, 0]) + (pixelColor[1, 0].G * m.Matrix[1, 0]) + (pixelColor[2, 0].G * m.Matrix[2, 0]) + (pixelColor[0, 1].G * m.Matrix[0, 1]) + (pixelColor[1, 1].G * m.Matrix[1, 1]) + (pixelColor[2, 1].G * m.Matrix[2, 1]) + (pixelColor[0, 2].G * m.Matrix[0, 2]) + (pixelColor[1, 2].G * m.Matrix[1, 2]) + (pixelColor[2, 2].G * m.Matrix[2, 2])) / m.Factor) + m.Offset); BlueChannel = (int)((((pixelColor[0, 0].B * m.Matrix[0, 0]) + (pixelColor[1, 0].B * m.Matrix[1, 0]) + (pixelColor[2, 0].B * m.Matrix[2, 0]) + (pixelColor[0, 1].B * m.Matrix[0, 1]) + (pixelColor[1, 1].B * m.Matrix[1, 1]) + (pixelColor[2, 1].B * m.Matrix[2, 1]) + (pixelColor[0, 2].B * m.Matrix[0, 2]) + (pixelColor[1, 2].B * m.Matrix[1, 2]) + (pixelColor[2, 2].B * m.Matrix[2, 2])) / m.Factor) + m.Offset); RedChannel = (RedChannel > 255) ? 255 : RedChannel; RedChannel = (RedChannel < 0) ? 0 : RedChannel; GreenChannel = (GreenChannel > 255) ? 255 : GreenChannel; GreenChannel = (GreenChannel < 0) ? 0 : GreenChannel; BlueChannel = (BlueChannel > 255) ? 255 : BlueChannel; BlueChannel = (BlueChannel < 0) ? 0 : BlueChannel; newImg.SetPixel(x + 1, y + 1, Color.FromArgb(A, RedChannel, GreenChannel, BlueChannel)); } } Img = newImg.Clone(); }
private static void ApplyConvolution3x3(ref ImageData Img, ConvolutionMatrix m) { ImageData newImg = Img.Clone(); Color[,] pixelColor = new Color[3, 3]; int A, RedChannel, GreenChannel, BlueChannel; for (int y = 0; y < Img.Height - 2; y++) { for (int x = 0; x < Img.Width - 2; x++) { pixelColor[0, 0] = Img[x, y]; pixelColor[0, 1] = Img[x, y + 1]; pixelColor[0, 2] = Img[x, y + 2]; pixelColor[1, 0] = Img[x + 1, y]; pixelColor[1, 1] = Img[x + 1, y + 1]; pixelColor[1, 2] = Img[x + 1, y + 2]; pixelColor[2, 0] = Img[x + 2, y]; pixelColor[2, 1] = Img[x + 2, y + 1]; pixelColor[2, 2] = Img[x + 2, y + 2]; A = pixelColor[1, 1].A; RedChannel = (int)((((pixelColor[0, 0].R * m.Matrix[0, 0]) + (pixelColor[1, 0].R * m.Matrix[1, 0]) + (pixelColor[2, 0].R * m.Matrix[2, 0]) + (pixelColor[0, 1].R * m.Matrix[0, 1]) + (pixelColor[1, 1].R * m.Matrix[1, 1]) + (pixelColor[2, 1].R * m.Matrix[2, 1]) + (pixelColor[0, 2].R * m.Matrix[0, 2]) + (pixelColor[1, 2].R * m.Matrix[1, 2]) + (pixelColor[2, 2].R * m.Matrix[2, 2])) / m.Factor) + m.Offset); GreenChannel = (int)((((pixelColor[0, 0].G * m.Matrix[0, 0]) + (pixelColor[1, 0].G * m.Matrix[1, 0]) + (pixelColor[2, 0].G * m.Matrix[2, 0]) + (pixelColor[0, 1].G * m.Matrix[0, 1]) + (pixelColor[1, 1].G * m.Matrix[1, 1]) + (pixelColor[2, 1].G * m.Matrix[2, 1]) + (pixelColor[0, 2].G * m.Matrix[0, 2]) + (pixelColor[1, 2].G * m.Matrix[1, 2]) + (pixelColor[2, 2].G * m.Matrix[2, 2])) / m.Factor) + m.Offset); BlueChannel = (int)((((pixelColor[0, 0].B * m.Matrix[0, 0]) + (pixelColor[1, 0].B * m.Matrix[1, 0]) + (pixelColor[2, 0].B * m.Matrix[2, 0]) + (pixelColor[0, 1].B * m.Matrix[0, 1]) + (pixelColor[1, 1].B * m.Matrix[1, 1]) + (pixelColor[2, 1].B * m.Matrix[2, 1]) + (pixelColor[0, 2].B * m.Matrix[0, 2]) + (pixelColor[1, 2].B * m.Matrix[1, 2]) + (pixelColor[2, 2].B * m.Matrix[2, 2])) / m.Factor) + m.Offset); RedChannel = (RedChannel > 255) ? 255 : RedChannel; RedChannel = (RedChannel < 0) ? 0 : RedChannel; GreenChannel = (GreenChannel > 255) ? 255 : GreenChannel; GreenChannel = (GreenChannel < 0) ? 0 : GreenChannel; BlueChannel = (BlueChannel > 255) ? 255 : BlueChannel; BlueChannel = (BlueChannel < 0) ? 0 : BlueChannel; newImg.SetPixel(x + 1, y + 1, Color.FromArgb(A, RedChannel, GreenChannel, BlueChannel)); } } Img = newImg.Clone(); }