public static ImageProcessingResults Process(ImageProcessingJob imageProcessingJob) { // Generate a new pixel array based on the old pixel array ColorRGBA[,] originalPixelColours = imageProcessingJob.PixelColors; var dimensionOne = originalPixelColours.GetLength(0); var dimensionTwo = originalPixelColours.GetLength(1); //PixelColor[,] processedPixels = (PixelColor[,])originalPixelColours.Clone(); ColorRGBA[,] processedPixels = new ColorRGBA[dimensionOne, dimensionTwo]; // Work out the rectangles var sourcePartitions = GetPartitions(dimensionOne, dimensionTwo, imageProcessingJob.Fidelity).ToArray(); foreach (var partition in sourcePartitions) { var averageColor = CalculateAverageColor(ElementsWithinRectangle(originalPixelColours, partition)); if (imageProcessingJob.AllowableColors.Count > 0) { averageColor = MatchColor(imageProcessingJob.AllowableColors, averageColor, imageProcessingJob.ColorMatchingAlgorithm); } int xMin = (int)Math.Floor(partition.Left); int xMax = Math.Min(processedPixels.GetLength(0), (int)Math.Ceiling(partition.Right)); int yMax = Math.Min(processedPixels.GetLength(1), (int)Math.Ceiling(partition.Bottom)); int yMin = (int)Math.Floor(partition.Top); for (int x = xMin; x < xMax; ++x) { for (int y = yMin; y < yMax; ++y) { processedPixels[x, y] = averageColor; } } } int pixelWidth = imageProcessingJob.PixelWidth; int pixelHeight = imageProcessingJob.PixelHeight; var dpiX = imageProcessingJob.DpiX; var dpiY = imageProcessingJob.DpiY; return(new ImageProcessingResults { PixelHeight = pixelHeight, PixelWidth = pixelWidth, DpiX = dpiX, DpiY = dpiY, Pixels = processedPixels }); }
public void ResetDisplayImage() { if (_sourceImage.Image == null) { return; } var bitmap = new FormatConvertedBitmap(_sourceImage.Image, PixelFormats.Bgra32, null, 0); ImageProcessingJob imageProcessingJob = new ImageProcessingJob { PixelColors = BitmapUtils.GetPixels(bitmap), Fidelity = this.ScaleProportion, AllowableColors = _allowableColors.ToList(), PixelWidth = bitmap.PixelWidth, PixelHeight = bitmap.PixelHeight, DpiX = bitmap.DpiX, DpiY = bitmap.DpiY, ColorMatchingAlgorithm = this.PatternMatchingAlgorithm }; this._imageProcessingWorkDispatcher.PushJob(imageProcessingJob); }
public void PushJob(ImageProcessingJob imageProcessingJob) { _imageProcessingJob = imageProcessingJob; _imageProcessingJobAvailable.Set(); }