ArduinoTest.Components.ColorManagment.Service.DirectxColorProvider.GetColors C# (CSharp) Method

GetColors() public method

Gets the average color of the screen
public GetColors ( ) : byte[]
return byte[]
        public byte[] GetColors()
        {
            var color = new byte[3];

            using(var memoryImage = new Bitmap(_samplePoints.CenterBox.Width, _samplePoints.CenterBox.Height, _graphics))
            {
                using (Graphics memoryGraphics = Graphics.FromImage(memoryImage))
                {
                    var size = new System.Drawing.Size
                    {
                        Width = _samplePoints.CenterBox.Width,
                        Height = _samplePoints.CenterBox.Height
                    };

                    memoryGraphics.CopyFromScreen(_samplePoints.CenterBox.X,
                                                    _samplePoints.CenterBox.Y,
                                                    0,
                                                    0,
                                                    size,
                                                    CopyPixelOperation.SourceCopy);

                    var colors = new List<Color>();
                    foreach (var point in _samplePoints.Points)
                    {
                        var pixel = memoryImage.GetPixel(point.X - _samplePoints.CenterBox.X, point.Y - _samplePoints.CenterBox.Y);
                        var sampledColor = Color.FromArgb(pixel.R, pixel.G, pixel.B);
                        colors.Add(sampledColor);
                    }
                    var averageColor = _colorHelper.ComputeAverageColors(colors);
                    color = _colorMapper.Map(averageColor);

                }

            }

            return color;
        }

Usage Example

Beispiel #1
0
        public void ShowDown()
        {
            const int iteration = 100;

            // Way 1
            IColorProvider way1 = new DirectxColorProvider();

            // Way 2
            IColorProvider way2 = new GDIColorProvider();

            var timer1 = new Stopwatch();
            timer1.Start();

            for (int x = 0; x < iteration; x++)
            {
                way1.GetColors();
            }

            timer1.Stop();
            Console.WriteLine(timer1.Elapsed);

            var timer2 = new Stopwatch();
            timer2.Start();

            for (int x = 0; x < iteration; x++)
            {
                way2.GetColors();
            }

            timer2.Stop();
            Console.WriteLine(timer2.Elapsed);
        }