public override Bitmap ProcessImage(Bitmap sourceImage, BackgroundWorker worker) { Dilation di = new Dilation(diameter); Erosion er = new Erosion(diameter); return(er.ProcessImage(di.ProcessImage(sourceImage, worker), worker)); }
public override Bitmap ProcessImage(Bitmap sourceImage, BackgroundWorker worker) { this.width = sourceImage.Width; this.height = sourceImage.Height; Bitmap resultImage = new Bitmap(sourceImage); Bitmap tempBitmap = new Bitmap(width, height); int checkProgress = -1; using (ImageWrapper wrapTempImage = new ImageWrapper(tempBitmap)) { foreach (var point in wrapTempImage) { wrapTempImage[point] = Color.White; } } Pepper pepper = new Pepper(percent); Erosion erosion = new Erosion(diameter, kernel); tempBitmap = erosion.ProcessImage(pepper.ProcessImage(tempBitmap, worker), worker); using (ImageWrapper wrapTempImage = new ImageWrapper(tempBitmap)) { using (ImageWrapper wrapImage = new ImageWrapper(resultImage, true)) { for (int i = 0; i < height; ++i) { if (i > checkProgress) { worker.ReportProgress((int)((double)i / resultImage.Height * 100)); if (worker.CancellationPending) { return(null); } checkProgress += 100; } for (int j = 0; j < width; ++j) { Color neighborColor = wrapTempImage[j, i]; if (neighborColor.R == 0 && neighborColor.G == 0 && neighborColor.B == 0) { wrapImage[j, i] = wrapTempImage[j, i]; } } } } } return(resultImage); }