[英]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.