/// <summary> /// Creates a comic rendered copy of the input image. /// </summary> public override Bitmap Render(Bitmap sourceImage) { // Converters GrayscaleY convertGray = new GrayscaleY(); GrayscaleToRGB convertColor = new GrayscaleToRGB(); // Convert grayscal images if (sourceImage.PixelFormat == PixelFormat.Format8bppIndexed) { sourceImage = convertColor.Apply(sourceImage); } Bitmap comicImage = AForge.Imaging.Image.Clone(sourceImage); Bitmap edgeLayer = null; Bitmap glowLayer = null; // Glow for smooth colors GaussianBlur filterBlur = new GaussianBlur(); filterBlur.Sigma = 2.0; filterBlur.Size = 4; glowLayer = filterBlur.Apply(comicImage); //SmartBlur filterBlur = new SmartBlur(10, 0.2); //glowLayer = filterBlur.Apply(comicImage); ContrastCorrection filterContrast = new ContrastCorrection(1 - (-this.Coloring * 0.1)); filterContrast.ApplyInPlace(glowLayer); BrightnessCorrection filterBrightness = new BrightnessCorrection((-this.Coloring * 0.1) + 0.1); filterBrightness.ApplyInPlace(glowLayer); Screen blendScreen = new Screen(glowLayer); blendScreen.ApplyInPlace(comicImage); // Create a layer for edges Convolution filterConvolution = new Convolution(ConvolutionKernel); edgeLayer = filterConvolution.Apply(comicImage); // Convert to grayscale edgeLayer = convertGray.Apply(edgeLayer); // Threshold (edge thickness) Threshold filterThreshold = new Threshold((byte)(this.Edging * 255 / 100)); filterThreshold.ApplyInPlace(edgeLayer); edgeLayer = convertColor.Apply(edgeLayer); // intersect comic with top layer (Darken blend) Intersect blendIntersect = new Intersect(edgeLayer); blendIntersect.ApplyInPlace(comicImage); return(comicImage); }
private void captureHand(UnmanagedImage mask, Rectangle rect, PictureBox pbArm, PictureBox pbHand) { Crop c = new Crop(rect); var handImage = c.Apply(mask); var ps = handImage.Collect16bppPixelValues(handImage.CollectActivePixels()); if (ps.Length > 0) { ushort max = Matrix.Max(ps); LevelsLinear16bpp levels = new LevelsLinear16bpp(); levels.InGray = new IntRange(0, max); levels.OutGray = new IntRange(0, 65535); levels.ApplyInPlace(handImage); // pbArm.Image = handImage.ToManagedImage(); double cutoff = 30000; Threshold th = new Threshold((int)cutoff); var handMask = th.Apply(handImage); var handMask8bit = AForge.Imaging.Image.Convert16bppTo8bpp(handMask.ToManagedImage()); BlobCounter bch = new BlobCounter(); bch.ObjectsOrder = ObjectsOrder.Area; bch.ProcessImage(handMask8bit); var blob = bch.GetObjectsInformation(); if (blob.Length > 0) { Intersect inters = new Intersect(); inters.UnmanagedOverlayImage = handMask; inters.ApplyInPlace(handImage); Crop ch = new Crop(blob[0].Rectangle); handImage = ch.Apply(handImage); ResizeNearestNeighbor res = new ResizeNearestNeighbor(25, 25); handImage = res.Apply(handImage); var leftHand = AForge.Imaging.Image.Convert16bppTo8bpp(handImage.ToManagedImage()); pbHand.Image = leftHand; } } }