private void frmEditor_Load(object sender, EventArgs e)
{
tileSet = new TileSet("tileset.xml", 32);
tileListView.SmallImageList = tileSet.GetImageList();
for (int i = 0; i < tileListView.SmallImageList.Images.Count; i++)
{
ListViewItem item = new ListViewItem(tileSet.GetTileID(i).ToString(), i);
tileListView.Items.Add(item);
}
}
namespace MapEditor
{
public class TileSet
{
private System.Drawing.Image tileSetImage;
private int tileSize;
class Tile
{
public Rectangle tileRectangle;
public int id;
}
List<Tile> tiles;
public TileSet(string filename, int tileSize)
{
this.tileSize = tileSize;
LoadTileSet(filename);
}
private void LoadTileSet(string filename)
{
using (XmlReader reader = XmlReader.Create(filename))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "imagefile":
tileSetImage = System.Drawing.Image.FromFile(reader["path"]);
break;
case "tile":
Tile newTile = new Tile();
int x = int.Parse(reader["x"]);
int y = int.Parse(reader["y"]);
int id = int.Parse(reader["id"]);
newTile.tileRectangle = new Rectangle(x * tileSize, y * tileSize, tileSize, tileSize);
newTile.id = id;
tiles.Add(newTile);
break;
}
}
}
}
}
public ImageList GetImageList()
{
ImageList list = new ImageList();
list.ImageSize = new System.Drawing.Size(32, 32);
int x, y;
foreach (Tile tile in tiles)
{
x = tile.tileRectangle.X;
y = tile.tileRectangle.Y;
list.Images.Add(CopyBitmap(tileSetImage, new System.Drawing.Rectangle(x, y, tileSize, tileSize)));
}
return list;
}
protected System.Drawing.Image CopyBitmap(System.Drawing.Image source, System.Drawing.Rectangle part)
{
System.Drawing.Image bmp = new System.Drawing.Bitmap(part.Width, part.Height);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp);
g.DrawImage(source, 0, 0, part, System.Drawing.GraphicsUnit.Pixel);
g.Dispose();
return bmp;
}
public int GetTileID(int index)
{
return tiles[index].id;
}
}
}
A big mess I know, but I'm hoping that maybe somebody who's familiar with windows forms could give me some insight into how I might accomplish what I'm trying to do. Any ideas?

New Topic/Question
Reply



MultiQuote








|