【问题标题】:Drawing a big number of images in C# Windows Forms在 C# Windows 窗体中绘制大量图像
【发布时间】:2012-10-20 22:49:55
【问题描述】:

我正在为 C# Windows 窗体中的游戏创建地图编辑器。我需要的是一个必须存储数千张图像的网格。

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

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

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

提前感谢您的任何建议。

【问题讨论】:

  • 这 2000 张图片是否同时显示在屏幕上?
  • 是的,他们是。而且它们需要非常快速地渲染,以便从地图上的一个地方到另一个地方不必花费 3 秒。
  • @Mosquito - 你想要的并不现实。为什么不能生成图像,然后确定需要显示哪些图像?我认为3 seconds 的速度与您的预期一样快。
  • 它们是按比例缩放的吗?即每个图像实际上是 100x100,但您显示的是 5x5 图像?
  • @Ramhound - 需要所有图像,因为有时我需要缩小并从远处查看地图。为什么不现实?那么其他地图编辑器是如何工作的呢?

标签: c# winforms image panel picturebox


【解决方案1】:

像你一样使用 Paint 事件,但是......

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

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

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

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

一开始你会增加加载时间,但我敢打赌你已经有很长的加载时间从磁盘上拉出 2000 张图像

【讨论】:

  • 非常感谢您的回答。 :-)
  • @Mosquito,很高兴它对您有所帮助!
猜你喜欢
  • 2021-01-23
  • 2015-04-22
  • 1970-01-01
  • 2019-02-16
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
相关资源
最近更新 更多