[英]How can I draw a big image in WinForms?
我正在尝试为自上而下风格的游戏制作地板,我曾经在其中使用图片框
有人告诉我,我应该使用Graphics.DrawImage();
而不是使用 Picturebox。 方法,这似乎有点帮助,但仍然很滞后。
我的油漆 function 看起来像这样绘制背景看起来像这样:
我应该如何使绘图不那么滞后? 图像为 2256 x 1504
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawImage(PeanutToTheDungeon.Properties.Resources.tutorialFloor, 0, 0);
}
我想在这里提出两点。
首先,不要那样使用Properties.Resources
。 每次使用该 object 的属性时,该资源的数据都会从程序集中提取。 这意味着每次引发Paint
事件时,您都会创建一个新的Image
object,这很常见。 您应该只使用该资源属性一次,将值分配给一个字段,然后重复使用该字段。 这意味着您将节省每次提取该数据和创建Image
object 的时间。
第二点可能适用也可能不适用,但是如果您通过调用Invalidate
或Refresh
强制引发Paint
事件,那么您需要确保使最小区域无效。 如果您不带任何参数调用Refresh
或Invalidate
,那么您就是在使整个 for 无效,这意味着将重新绘制整个表单。 屏幕上像素的重绘实际上是过程中较慢的部分,因此您需要将这部分保持在最低限度。 这意味着,当您的游戏板上发生某些变化时,您需要计算包含所有可能变化的最小区域,并在调用Invalidate
时指定该区域。 这将减少重新绘制的数量并加快该过程。
请注意,您不需要更改绘图代码。 您总是绘制所有内容,然后系统将绘制您之前无效的表格部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.