public override void Render(RenderGrid grid, Stream stream) { int width = CalculateDimension(grid.ColumnCount); int height = CalculateDimension(grid.RowCount); using (var image = new Image <Rgba32>(width, height)) { image.Mutate(); image.Mutate(context => { var fullArea = new Rectangle(0, 0, width, height); foreach (AreaRenderer backgroundRenderer in BackgroundRenderers) { backgroundRenderer.Render(context, fullArea); } foreach (RenderCell cell in grid.GetCells()) { var cellArea = new Rectangle( TranslateCoordWithMargin(cell.Column * Settings.CellSize), TranslateCoordWithMargin(cell.Row * Settings.CellSize), Settings.CellSize, Settings.CellSize); if (cell.RenderType == RenderType.Ground) { foreach (CellRenderer groundRenderer in GroundRenderers) { groundRenderer.Render(context, cellArea, cell); } } if (cell.RenderType == RenderType.Wall) { foreach (CellRenderer wallRenderer in WallRenderers) { wallRenderer.Render(context, cellArea, cell); } } } }); image.Save(stream, ImageFormats.Png); } }