C# 绘制几万小图片,如何提高速度?

发布于 2022-09-06 07:42:07 字数 1665 浏览 27 评论 0

我有一个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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沫雨熙 2022-09-13 07:42:07

最耗时的再哪里,你得考察一下。估计BlockInfoList.Exists、BlockInfoList.Find、大量的文件检查和读取操作都不会很快。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文