private BasicStats GetBasicStats(FastBitmap.FastBitmap bitmap, Rectangle sourceRectangle) { List <int> lowResRPoints = new List <int>(12); List <int> lowResGPoints = new List <int>(12); List <int> lowResBPoints = new List <int>(12); List <int> lowResIntensityPoints = new List <int>(12); foreach (var lowResRect in GetLowResRectangles(sourceRectangle)) { var segment = bitmap.GetColors(lowResRect).ToArray(); lowResRPoints.Add(ApplyFilter(segment, c => c.R, LowResSingleIntFilter)); lowResGPoints.Add(ApplyFilter(segment, c => c.G, LowResSingleIntFilter)); lowResBPoints.Add(ApplyFilter(segment, c => c.B, LowResSingleIntFilter)); lowResIntensityPoints.Add(ApplyFilter(segment, c => (int)((c.R + c.G + c.B) / 3.0), LowResSingleIntFilter)); } return(new BasicStats() { LowResR = new ConvolutionResult(lowResRPoints), LowResG = new ConvolutionResult(lowResGPoints), LowResB = new ConvolutionResult(lowResBPoints), LowResIntensity = new ConvolutionResult(lowResIntensityPoints), }); }
public AdvancedStats GetAdvancedStats(FastBitmap.FastBitmap bitmap, Rectangle sourceRectangle) { List <int> midResAngle45Points = new List <int>(48); List <int> midResAngle135Points = new List <int>(48); List <int> midResVerticalPoints = new List <int>(48); List <int> midResHorizontalPoints = new List <int>(48); List <int> midResEdgePoints = new List <int>(48); List <int> midResRPoints = new List <int>(48); List <int> midResGPoints = new List <int>(48); List <int> midResBPoints = new List <int>(48); List <int> midResIntensityPoints = new List <int>(48); foreach (var midResRect in GetMidResRectangles(sourceRectangle)) { Color[] segment = bitmap.GetColors(midResRect).ToArray(); int[] greyScaleSegment = segment.Select(c => (int)((c.R + c.G + c.B) / 3.0)).ToArray(); midResAngle45Points.Add(ApplyFilter(greyScaleSegment, MidRes45Filter)); midResAngle135Points.Add(ApplyFilter(greyScaleSegment, MidRes135Filter)); midResVerticalPoints.Add(ApplyFilter(greyScaleSegment, MidResVerticalFilter)); midResHorizontalPoints.Add(ApplyFilter(greyScaleSegment, MidResHorizontalFilter)); midResEdgePoints.Add(ApplyFilter(greyScaleSegment, MidResEdgeFilter)); midResRPoints.Add(ApplyFilter(segment, c => c.R, ReduceIdentityFilter)); midResGPoints.Add(ApplyFilter(segment, c => c.G, ReduceIdentityFilter)); midResBPoints.Add(ApplyFilter(segment, c => c.B, ReduceIdentityFilter)); midResIntensityPoints.Add(ApplyFilter(greyScaleSegment, ReduceIdentityFilter)); } return(new AdvancedStats() { MidRes45 = new ConvolutionResult(midResAngle45Points), MidRes135 = new ConvolutionResult(midResAngle135Points), MidResVertical = new ConvolutionResult(midResVerticalPoints), MidResHorizontal = new ConvolutionResult(midResHorizontalPoints), MidResEdge = new ConvolutionResult(midResEdgePoints), MidResR = new ConvolutionResult(midResRPoints), MidResG = new ConvolutionResult(midResGPoints), MidResB = new ConvolutionResult(midResBPoints), MidResIntensity = new ConvolutionResult(midResIntensityPoints), }); }