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

时间:2012-10-31 13:03:54

标签: c# winforms image panel picturebox

我正在使用C#Windows Forms创建游戏的地图编辑器。我需要的是一个网格,甚至需要存储几千个图像。

我的第一种方法是创建一个Panel控件,然后向其中添加多个PictureBoxes。不幸的是,2000张图片需要大约3秒钟才能画出来。

然后我决定尝试使用Rectangles的{​​{1}}方法创建Images并在其上绘制Panel,以期获得更好的结果,但它仍然非常慢。< / p>

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

提前感谢任何建议。

1 个答案:

答案 0 :(得分:3)

使用Paint事件,但是......

作为加载图像的一部分,缓存缩放版本,其中将16个图像合并为一个,这只有125个图像,当您缩小某个比例时,切换到使用预渲染的缩小版本。

您可以根据需要随时进行多种缩放级别,并且可以随时在屏幕上保留尽可能少的图像。所以你可以再把它除以4。

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

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

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