我有一个schematic文件,是《Minecraft》的一种纹理文件,里面有各种方块的ID数据。
我打算读取里面的数据然后根据ID编号绘制到我的程序上面,但是我发现我的方法非常慢,别人生成一个256256大小的图片几乎很快(1个图片1616像素).
而我这边完全绘制完需要6秒左右。以下是我的代码:
SourceBlueMap = new Bitmap(BlocksRect.Width, BlocksRect.Height);
Graphics Gpi = Graphics.FromImage(SourceBlueMap);
AlphaBlock block;
string strPath = @"C:\Users\Administrator\Desktop\Blocks";
BlockInfo blockinfo;
for (int x = 0; x < iXDim; x++)
{
for (int y = 0; y < iYDim; y++)
{
for (int z = 0; z < iZDim; z++)
{
block = Blocks.GetBlock(x, y, z);
rect.X = x * BlockWidth;
rect.Y = z * BlockWidth;
if (BlockInfoList.Exists(info =>
(info.ID == block.ID && info.Data == block.Data)))
{
blockinfo = BlockInfoList.Find(info =>
(info.ID == block.ID && info.Data == block.Data));
if (File.Exists(strPath + "\\" + blockinfo.Name + ".png"))
{
using (Bitmap bmp = new Bitmap(strPath + "\\" + blockinfo.Name + ".png"))
{
Gpi.DrawImage(bmp, rect);
}
}
}
}
}
}
Gpi.Dispose();
最耗时的再哪里,你得考察一下。估计BlockInfoList.Exists、BlockInfoList.Find、大量的文件检查和读取操作都不会很快。