private static AverageColour GetSectionLED(ScreenSectionReadingRequest request) { var totals = new long[] { 0, 0, 0 }; var heightLimit = request.EndY * request.Stride; var widthLimit = request.EndX * request.BPPModifier; var pixelCount = 0; unsafe { var p = (byte *)(void *)request.ScreenPointer; for (var y = request.StartY * request.Stride; y < heightLimit; y += request.Stride) { for (var x = request.StartX * request.BPPModifier; x < widthLimit; x += request.BPPModifier) { for (var color = 0; color < 3; color++) { var idx = y + x + color; totals[color] += p[idx]; } pixelCount++; } } } return(new AverageColour { AverageB = GetAverageColour(totals[0], pixelCount), AverageG = GetAverageColour(totals[1], pixelCount), AverageR = GetAverageColour(totals[2], pixelCount) }); }
private static Task <AverageColour> GetSectionReading(ScreenSectionReadingRequest sectionRequest) { return(Task.Run(() => GetSectionLED(sectionRequest))); }