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); }
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); }
public Task <ShapeCollection> ProcessImage(IPixelComparer comparer, PixelColor[,] pixels) { return(Task.Run(() => InternalExecute(comparer, pixels))); }