private Bitmap filter(string ft) { Bitmap effect = sourceImage; filteredImage = sourceImage; if (ft == "none") { effect = sourceImage; } else if (ft == "grayscale") { effect = ApplyFilter(Grayscale.CommonAlgorithms.BT709); } else if (ft == "sepia") { effect = ApplyFilter(new Sepia()); } else if (ft == "invert") { effect = ApplyFilter(new Invert()); } else if (ft == "rotate") { effect = ApplyFilter(new RotateChannels()); } else if (ft == "color") { effect = ApplyFilter(new ColorFiltering(new IntRange(25, 230), new IntRange(25, 230), new IntRange(25, 230))); } else if (ft == "hue") { effect = ApplyFilter(new HueModifier(50)); } else if (ft == "saturation") { effect = ApplyFilter(new SaturationCorrection(0.15f)); } else if (ft == "brightness") { effect = ApplyFilter(new BrightnessCorrection()); } else if (ft == "contrast") { effect = ApplyFilter(new ContrastCorrection()); } else if (ft == "hsl") { effect = ApplyFilter(new HSLFiltering(new IntRange(330, 30), new Range(0, 1), new Range(0, 1))); } else if (ft == "YCbCr") { YCbCrLinear f = new YCbCrLinear(); f.InCb = new Range(-0.3f, 0.3f); effect = ApplyFilter(f); } else if (ft == "YCbCr") { effect = ApplyFilter(new YCbCrFiltering(new Range(0.2f, 0.9f), new Range(-0.3f, 0.3f), new Range(-0.3f, 0.3f))); } else if (ft == "threshold") { Bitmap originalImage = sourceImage; // get grayscale image sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); // apply threshold filter effect = ApplyFilter(new Threshold()); // delete grayscale image and restore original sourceImage.Dispose(); sourceImage = originalImage; } else if (ft == "floyd") { Bitmap originalImage = sourceImage; // get grayscale image sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); // apply threshold filter effect = ApplyFilter(new FloydSteinbergDithering()); // delete grayscale image and restore original sourceImage.Dispose(); sourceImage = originalImage; } else if (ft == "ordered") { // save original image Bitmap originalImage = sourceImage; // get grayscale image sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); // apply threshold filter effect = ApplyFilter(new OrderedDithering()); // delete grayscale image and restore original sourceImage.Dispose(); sourceImage = originalImage; } else if (ft == "correlation") { effect = ApplyFilter(new Convolution(new int[,] { { 1, 2, 3, 2, 1 }, { 2, 4, 5, 4, 2 }, { 3, 5, 6, 5, 3 }, { 2, 4, 5, 4, 2 }, { 1, 2, 3, 2, 1 } })); } else if (ft == "sharpen") { effect = ApplyFilter(new Sharpen()); } else if (ft == "edgedetector") { // save original image Bitmap originalImage = sourceImage; // get grayscale image sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); // apply edge filter effect = ApplyFilter(new DifferenceEdgeDetector()); // delete grayscale image and restore original sourceImage.Dispose(); sourceImage = originalImage; } else if (ft == "homogenity") { // save original image Bitmap originalImage = sourceImage; // get grayscale image sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); // apply edge filter effect = ApplyFilter(new HomogenityEdgeDetector()); // delete grayscale image and restore original sourceImage.Dispose(); sourceImage = originalImage; } else if (ft == "sobel") { // save original image Bitmap originalImage = sourceImage; // get grayscale image sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); // apply edge filter effect = ApplyFilter(new SobelEdgeDetector()); // delete grayscale image and restore original sourceImage.Dispose(); sourceImage = originalImage; } else if (ft == "rgbLinear") { LevelsLinear f = new LevelsLinear(); f.InRed = new IntRange(30, 230); f.InGreen = new IntRange(50, 240); f.InBlue = new IntRange(10, 210); effect = ApplyFilter(f); } else if (ft == "jitter") { effect = ApplyFilter(new Jitter()); } else if (ft == "oilpainting") { effect = ApplyFilter(new OilPainting()); } else if (ft == "gaussinblur") { effect = ApplyFilter(new GaussianBlur(2.0, 7)); } else if (ft == "texture") { effect = ApplyFilter(new Texturer(new TextileTexture(), 1.0, 0.8)); } return effect; }
// On Filters->YCbCr filtering private void yCbCrLinearFiltersItem_Click( object sender, System.EventArgs e ) { YCbCrLinear filter = new YCbCrLinear( ); filter.InCb = new DoubleRange( -0.3, 0.3 ); ApplyFilter( filter ); yCbCrLinearFiltersItem.Checked = true; }