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
            });
        }
Пример #2
0
        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();
 }
 public void PushJob(ImageProcessingJob imageProcessingJob)
 {
     _imageProcessingJob = imageProcessingJob;
     _imageProcessingJobAvailable.Set();
 }