Example #1
0
        private void GetAverageColor()
        {
            ScreenService.GetScreenResolution(out var screenWidth, out var screenHeight);

            var size = new Size(screenWidth, screenHeight);

            var verticalDepth   = byte.Parse(ReadTextBox(VerticalDepthSampling));
            var horizontalDepth = byte.Parse(ReadTextBox(HorizontalDepthSampling));
            var screenBitmap    = ScreenService.CreateBitmap(screenWidth, screenHeight);
            var readings        = ArrayService.CreateTaskByteArray(4);
            var timer           = new Stopwatch();

            do
            {
                WaitMilliseconds(100);
                timer.Start();
                screenBitmap = ScreenService.CopyFromTheScreen(screenBitmap, size);
                var format      = screenBitmap.PixelFormat;
                var bppModifier =
                    format == PixelFormat.Format24bppRgb
                        ? 3
                        : 4; // cutting corners, will fail on anything else but 32 and 24 bit images
                var sourceData = screenBitmap.LockBits(new Rectangle(0, 0, screenWidth, screenHeight),
                                                       ImageLockMode.ReadOnly,
                                                       format);
                var stride        = sourceData.Stride;
                var scan          = sourceData.Scan0;
                var readingsCount = 0;

                #region VerticalRight
                readings[readingsCount++] = SendSideRequestAsync(screenHeight, screenWidth, verticalDepth,
                                                                 _screenLedCount.VerticalLedCountRight, 0, scan, bppModifier, stride, false, false, false);
                #endregion

                #region HorizonalTop
                readings[readingsCount++] = SendSideRequestAsync(screenHeight, screenWidth, horizontalDepth,
                                                                 _screenLedCount.HorizontalLedCountTop, 0, scan, bppModifier, stride, false, true, true);
                #endregion

                #region VerticalLeft
                readings[readingsCount++] = SendSideRequestAsync(screenHeight, screenWidth, verticalDepth,
                                                                 _screenLedCount.VerticalLedCountLeft, 0, scan, bppModifier, stride, true, true, false);
                #endregion

                #region HorizonalBottom
                readings[readingsCount] = SendSideRequestAsync(screenHeight, screenWidth, horizontalDepth,
                                                               _screenLedCount.HorizontalLedCountBottom, 0, scan, bppModifier, stride, true, false, true);
                #endregion
                var resultsArray = ArrayService.AwaitTaskByteArray(readings);
                screenBitmap.UnlockBits(sourceData);
                var endArray    = ArrayService.ConvertToSingleArray(resultsArray);
                var elapsedTime = timer.ElapsedMilliseconds.ToString();
                timer.Reset();
                UpdateTextBox(OutputBox1, elapsedTime);
                SendDataToSerialPort(endArray, endArray.Length);
            } while (_isLEDReadingRunning);
            screenBitmap.Dispose();
        }