Exemple #1
0
        /// <summary>
        /// Get average led colour, for Vertical sides of the screen, asynchronous.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private static byte[] GetVerticalSideAsync(SideLedReadingRequest request)
        {
            var blockY = request.Y / request.SideLedCount;

            GetStartAndEndSecondarySide(request.StartFromZero, request.Depth, request.X, out var startX, out var endX);
            var ledCount = 0;
            var readings = ArrayService.CreateTaskAverageColourArray(request.SideLedCount);

            if (request.IsIncremental)
            {
                int startY;
                int endY;
                for (var count = 0; count < request.SideLedCount - 1; count++)
                {
                    startY = count * blockY;
                    endY   = startY + blockY;
                    readings[ledCount++] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY));
                }
                startY             = blockY * (request.SideLedCount - 1);
                endY               = request.Y;
                readings[ledCount] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY));
            }
            else
            {
                var startY = blockY * (request.SideLedCount - 1);
                var endY   = request.Y;
                readings[ledCount++] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY));
                for (var count = request.SideLedCount - 2; count >= 0; count--)
                {
                    startY = count * blockY;
                    endY   = startY + blockY;
                    readings[ledCount++] = GetSectionReading(CreateSectionReadingRequest(request.ScreenPointer, request.Stride, request.BPPModifier, startX, endX, startY, endY));
                }
            }
            var averageArray  = ArrayService.AwaitTaskAverageColourArray(readings);
            var samplingArray = new byte[request.SideLedCount * 3];

            for (var readingCount = 0; readingCount < averageArray.Length; readingCount++)
            {
                samplingArray = ArrayService.AdColourToByteArray(samplingArray, averageArray[readingCount], readingCount);
            }
            return(samplingArray);
        }
Exemple #2
0
        /// <summary>
        /// Get average led colour, for vertical sides of the screen.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private static byte[] GetVerticalSide(SideLedReadingRequest request)
        {
            var blockY         = request.Y / request.SideLedCount;
            var sectionRequest = CreateSectionReadingRequest(request);

            GetStartAndEndSecondarySide(request.StartFromZero, request.Depth, request.X, out var start, out var end);
            sectionRequest.StartX = start;
            sectionRequest.EndX   = end;
            if (request.IsIncremental)
            {
                for (var count = 0; count < request.SideLedCount - 1; count++)
                {
                    sectionRequest.StartY = count * blockY;
                    sectionRequest.EndY   = sectionRequest.StartY + blockY;
                    request.ColourArray   =
                        ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++);
                }
                sectionRequest.StartY = blockY * (request.SideLedCount - 1);
                sectionRequest.EndY   = request.Y;
                request.ColourArray   =
                    ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++);
            }
            else
            {
                sectionRequest.StartY = blockY * (request.SideLedCount - 1);
                sectionRequest.EndY   = request.Y;
                request.ColourArray   =
                    ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++);
                for (var count = request.SideLedCount - 2; count >= 0; count--)
                {
                    sectionRequest.StartY = count * blockY;
                    sectionRequest.EndY   = sectionRequest.StartY + blockY;
                    request.ColourArray   =
                        ArrayService.AdColourToByteArray(request.ColourArray, GetSectionLED(sectionRequest), request.CurrentLedCount++);
                }
            }

            return(request.ColourArray);
        }