//マップチップを読み取る public Bitmap GetMapChip(int spno) { // 座標を読み取り. var mcpoint = SpliteCell(spno); // 座標とサイズを格納. Rectangle rect = new Rectangle(mcpoint.X, mcpoint.Y, MapChip, MapChip); // 座標とサイズからコピーを作成. Bitmap bmpNew = MapImage.Clone(rect, MapImage.PixelFormat); // コピーを返す. return(bmpNew); }
private void GetTiles() { if (MapImage.Width % Constants.TileWidthPixels != 0 || MapImage.Height % Constants.TileHeightPixels != 0) { throw new InvalidOperationException("Map is not divisible by tile size"); } var tilesPerRow = MapImage.Width / Constants.TileWidthPixels; var tilesPerColumn = MapImage.Height / Constants.TileHeightPixels; Tiles = new Tile[tilesPerRow, tilesPerColumn]; for (int y = 0; y < MapImage.Height; y += Constants.TileHeightPixels) { for (int x = 0; x < MapImage.Width; x += Constants.TileWidthPixels) { var rect = new Rectangle(x, y, Constants.TileWidthPixels, Constants.TileHeightPixels); var tileImage = MapImage.Clone(rect, PixelFormat.Format32bppArgb); Tiles[x / Constants.TileWidthPixels, y / Constants.TileWidthPixels] = new Tile(new Point(x, y), tileImage); } } }
private void GetScreens() { if (MapImage.Width % Constants.ScreenWidthPixels != 0 || MapImage.Height % Constants.ScreenHeightPixels != 0) { throw new InvalidOperationException("Map is not divisible by screen size"); } var screensPerRow = MapImage.Width / Constants.ScreenWidthPixels; var screensPerColumn = MapImage.Height / Constants.ScreenHeightPixels; Screens = new Screen[screensPerRow, screensPerColumn]; for (int y = 0; y < MapImage.Height; y += Constants.ScreenHeightPixels) { for (int x = 0; x < MapImage.Width; x += Constants.ScreenWidthPixels) { var rect = new Rectangle(x, y, Constants.ScreenWidthPixels, Constants.ScreenHeightPixels); var screenImage = MapImage.Clone(rect, PixelFormat.Format32bppArgb); Screens[x / Constants.ScreenWidthPixels, y / Constants.ScreenHeightPixels] = new Screen(new Point(x, y), screenImage); } } GiveScreensTiles(); }