コード例 #1
0
        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),
            });
        }
コード例 #2
0
        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),
            });
        }