diff --git a/OpenRA.Editor/Form1.cs b/OpenRA.Editor/Form1.cs index 978f2ad3e6..19b00c7508 100755 --- a/OpenRA.Editor/Form1.cs +++ b/OpenRA.Editor/Form1.cs @@ -122,7 +122,7 @@ namespace OpenRA.Editor { try { - var bitmap = RenderUtils.RenderTemplate(tileset, (ushort)t.Key, palette); + var bitmap = tileset.RenderTemplate((ushort)t.Key, palette); var ibox = new PictureBox { Image = bitmap, diff --git a/OpenRA.Editor/RenderUtils.cs b/OpenRA.Editor/RenderUtils.cs index a9e03f2802..8dcf4543a8 100644 --- a/OpenRA.Editor/RenderUtils.cs +++ b/OpenRA.Editor/RenderUtils.cs @@ -18,45 +18,6 @@ namespace OpenRA.Editor { static class RenderUtils { - public static Bitmap RenderTemplate(TileSet ts, ushort n, Palette p) - { - var template = ts.Templates[n]; - var tile = ts.Tiles[n]; - - var bitmap = new Bitmap(ts.TileSize * template.Size.X, ts.TileSize * template.Size.Y, - PixelFormat.Format8bppIndexed); - - bitmap.Palette = p.AsSystemPalette(); - - var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), - ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); - - unsafe - { - byte* q = (byte*)data.Scan0.ToPointer(); - var stride = data.Stride; - - for (var u = 0; u < template.Size.X; u++) - for (var v = 0; v < template.Size.Y; v++) - if (tile.TileBitmapBytes[u + v * template.Size.X] != null) - { - var rawImage = tile.TileBitmapBytes[u + v * template.Size.X]; - for (var i = 0; i < ts.TileSize; i++) - for (var j = 0; j < ts.TileSize; j++) - q[(v * ts.TileSize + j) * stride + u * ts.TileSize + i] = rawImage[i + ts.TileSize * j]; - } - else - { - for (var i = 0; i < ts.TileSize; i++) - for (var j = 0; j < ts.TileSize; j++) - q[(v * ts.TileSize + j) * stride + u * ts.TileSize + i] = 0; - } - } - - bitmap.UnlockBits(data); - return bitmap; - } - static Bitmap RenderShp(ShpReader shp, Palette p) { var frame = shp[0]; diff --git a/OpenRA.FileFormats/Map/TileSet.cs b/OpenRA.FileFormats/Map/TileSet.cs index ad8e2f5491..d76bf96c38 100644 --- a/OpenRA.FileFormats/Map/TileSet.cs +++ b/OpenRA.FileFormats/Map/TileSet.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Drawing; +using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Reflection; @@ -152,5 +153,44 @@ namespace OpenRA.FileFormats return "Clear"; // Default walkable return ret; } + + public Bitmap RenderTemplate(ushort n, Palette p) + { + var template = Templates[n]; + var tile = Tiles[n]; + + var bitmap = new Bitmap(TileSize * template.Size.X, TileSize * template.Size.Y, + PixelFormat.Format8bppIndexed); + + bitmap.Palette = p.AsSystemPalette(); + + var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), + ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed); + + unsafe + { + byte* q = (byte*)data.Scan0.ToPointer(); + var stride = data.Stride; + + for (var u = 0; u < template.Size.X; u++) + for (var v = 0; v < template.Size.Y; v++) + if (tile.TileBitmapBytes[u + v * template.Size.X] != null) + { + var rawImage = tile.TileBitmapBytes[u + v * template.Size.X]; + for (var i = 0; i < TileSize; i++) + for (var j = 0; j < TileSize; j++) + q[(v * TileSize + j) * stride + u * TileSize + i] = rawImage[i + TileSize * j]; + } + else + { + for (var i = 0; i < TileSize; i++) + for (var j = 0; j < TileSize; j++) + q[(v * TileSize + j) * stride + u * TileSize + i] = 0; + } + } + + bitmap.UnlockBits(data); + return bitmap; + } } }