Exemple #1
0
        public MapState[,] GetExplorationMap(IPixelComparer pixelComparer, PixelColor[,] source)
        {
            int width  = source.GetLength(0);
            int height = source.GetLength(1);

            var cellState = new MapState[width, height];

            // TODO: Parallelise
            // TODO: Refactor into Strategy pattern.
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    var newColor = source[x, y]
                                   .ToColor();

                    var open = pixelComparer
                               .IsOpen(newColor);

                    cellState[x, y] = open ?
                                      MapState.AsOpen() :
                                      MapState.AsClosed();
                }
            }

            return(cellState);
        }
Exemple #2
0
        private ShapeCollection InternalExecute(IPixelComparer comparer, PixelColor[,] pixels)
        {
            var map = _mapBuilder.GetExplorationMap(comparer, pixels);

            var shapeDetector = new ShapeDetector(map);
            var edgePlotter   = new EdgePlotter(_logger);
            var shapeMap      = shapeDetector.CreateShapeMap();

            var edgeList = new ShapeCollection();

            while (shapeDetector.GenerateShape(shapeMap))
            {
                var edge = edgePlotter.CalculateEdge(shapeMap);

                if (edge.Count > 2)
                {
                    edgeList.Add(edge);
                }
            }

            return(edgeList);
        }
Exemple #3
0
 public Task <ShapeCollection> ProcessImage(IPixelComparer comparer, PixelColor[,] pixels)
 {
     return(Task.Run(() => InternalExecute(comparer, pixels)));
 }