c# - 在 C# Windows 窗体中绘制大量图像

标签 c# winforms image panel picturebox

我正在使用 C# Windows 窗体为游戏创建 map 编辑器。我需要的是一个可以存储数千张图像的网格。

我的第一个方法是创建一个 Panel 控件,然后向其添加多个 PictureBoxes。不幸的是,绘制 2000 张图像大约需要 3 秒。

然后我决定尝试在 PanelOnPaint() 中创建 Rectangles 并在其上绘制 Images希望得到更好结果的方法,但它仍然很慢。

有没有更好、更有效的方法来在 Windows 窗体中呈现这么多图像?

提前感谢您的任何建议。

最佳答案

像您所做的那样使用 Paint 事件,但是...

作为图像加载的一部分,缓存缩小版本,将 16 张图像合并为一张,只有 125 张图像,当缩小超过一定比例时,切换到使用预渲染的缩小版本.

对于多个缩放级别,您可以根据需要随时执行此操作,以便随时在屏幕上保留尽可能少的图像。所以你可以再除以 4。

我为一个包含 65536 张图像 (256 x 256) 的 map 的项目执行此操作。缓存也被写入磁盘,因此每次缩小时您都会看到相同数量的图像。在我的编辑器中,我一次只能查看 16 张图像,即使我正在查看整张 map 也是如此。

您可以通过了解用户的可用选项(例如平移和缩放)进一步改进这一点,这会为您提供用户接下来可能查看的有限图像子集,因此您可以预加载这些图像以提高性能。

您最初会增加加载时间,但我敢打赌您已经有大量的加载时间从磁盘中拉出 2000 张图像

关于c# - 在 C# Windows 窗体中绘制大量图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158625/

相关文章:

java - 如何设置安卓锁屏图片

javascript - 有没有办法设置站点上图像的加载优先级?

c# - 如何使用 IVsPackageSourceProvider 提供程序

c# - MapPoint 2009 负载性能

c# - 在网络浏览器控件中打印谷歌地图 - 不会显示方向线

c# - 表格中的光标点

vb.net - 使用 c#.net 将剪贴板中的图像显示到 Windows 的默认图像查看器

java - 如何获取在 Zebra Designer 中创建的标签中的变量字段?

c# - 访问 List<int> 的最后一个和第一个元素的更快方法

c# - WPF 中的便笺项目。模型、 View 、 View 模型