在C# Windows Forms中绘制大量图像

5
我正在使用C# Windows Forms为游戏创建地图编辑器。我需要一个网格来存储甚至数千张图片。我的第一种方法是创建一个面板控件,然后将多个PictureBox添加到其中。不幸的是,2000张图片大约需要3秒钟才能绘制出来。
然后我决定尝试创建矩形,并在面板的OnPaint()方法中绘制图像,希望能得到更好的结果,但速度仍然非常慢。
在Windows Forms中有更好、更有效的方式来渲染这么多图片吗?
提前感谢任何建议。

@Mosquito - 你想要的并不现实。为什么不能先生成图像,然后确定需要显示哪些图像?我认为 3秒 是你能得到的最快速度了。 - Security Hound
它们被缩放了吗?也就是说每个图像实际上是100x100,但您正在显示一个5x5的图像? - Brad
@Ramhound - 所有的图片都是必需的,因为有时我需要缩小并从远处查看地图。为什么这不现实呢?其他地图编辑器是如何工作的? - Piotr Chojnacki
@Brad 是的,它们已经被缩放了。它们的原始大小是32x32像素,但当我缩小时,我需要减小它们的大小。 - Piotr Chojnacki
@Mosquito - 他们不会一次性生成3,000张图片,他们只会根据需要为特定的视图生成所需的图片(如果他们确实要生成这些图片)。 - Security Hound
显示剩余2条评论
1个回答

2
使用您已经使用过的绘画事件,但是...
作为图像加载的一部分,缓存一个缩小版本,将其中16个图像合并成一个,仅为125个图像。当您在一定比例上缩小时,切换到使用预渲染的缩小版本。
您可以随意多次执行此操作,以实现多个缩放级别,目的是在任何时候仅在屏幕上保留尽可能少的图像。因此,您可以再次将其除以4。
我在一个由65536张图像(256 x 256)组成的地图项目中使用了这种方法。缓存也写入磁盘,因此每次缩小时您看到的图像数量相同。在我的编辑器中,即使我查看整个地图,我也只能查看16张图像。
您还可以通过了解用户可用选项(例如Pan和Zoom)来进一步改善这一点,这会为您提供用户可能下一步查看的有限子集,因此您可以预加载这些内容以改善性能。
最初的加载时间会增加,但我敢打赌,从磁盘中读取2000张图像已经需要很长时间了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接