move RenderTemplate onto TileSet
This commit is contained in:
@@ -122,7 +122,7 @@ namespace OpenRA.Editor
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var bitmap = RenderUtils.RenderTemplate(tileset, (ushort)t.Key, palette);
|
var bitmap = tileset.RenderTemplate((ushort)t.Key, palette);
|
||||||
var ibox = new PictureBox
|
var ibox = new PictureBox
|
||||||
{
|
{
|
||||||
Image = bitmap,
|
Image = bitmap,
|
||||||
|
|||||||
@@ -18,45 +18,6 @@ namespace OpenRA.Editor
|
|||||||
{
|
{
|
||||||
static class RenderUtils
|
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)
|
static Bitmap RenderShp(ShpReader shp, Palette p)
|
||||||
{
|
{
|
||||||
var frame = shp[0];
|
var frame = shp[0];
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -152,5 +153,44 @@ namespace OpenRA.FileFormats
|
|||||||
return "Clear"; // Default walkable
|
return "Clear"; // Default walkable
|
||||||
return ret;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user