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

GetColors() public method

public GetColors ( ) : byte[]
return byte[]
        public byte[] GetColors()
        {
            var colors = new byte[3];

            IntPtr hDesk = GetDesktopWindow();
            IntPtr hSrce = GetWindowDC(hDesk);
            IntPtr hDest = CreateCompatibleDC(hSrce);
            IntPtr hBmp = CreateCompatibleBitmap(hSrce, SamplePoints.CenterBox.Width*2, SamplePoints.CenterBox.Height*2);
            IntPtr hOldBmp = SelectObject(hDest, hBmp);
            bool b = BitBlt(hDest,
                            0,
                            0,
                            SamplePoints.CenterBox.Width * 2,
                            SamplePoints.CenterBox.Height * 2,
                            hSrce,
                            0,
                            0,
                            CopyPixelOperation.SourceCopy);

            using (var bmp = Bitmap.FromHbitmap(hBmp))
            {
                var colorsList = new List<Color>();
                foreach (var point in SamplePoints.Points)
                {

                    var pixel = bmp.GetPixel(point.X, point.Y);
                    var pixelColor = Color.FromArgb(pixel.R, pixel.G, pixel.B);
                    colorsList.Add(pixelColor);
                }
                var averagedColor = _colorHelper.ComputeAverageColors(colorsList);
                colors = _colorMapper.Map(averagedColor);
            }

            SelectObject(hDest, hOldBmp);
            DeleteObject(hBmp);
            DeleteDC(hDest);
            ReleaseDC(hDesk, hSrce);

            return colors;
        }

Usage Example

Example #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);
        }