簡體   English   中英

如何在 WinForms 中繪制大圖像?

[英]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 的時間。

第二點可能適用也可能不適用,但是如果您通過調用InvalidateRefresh強制引發Paint事件,那么您需要確保使最小區域無效。 如果您不帶任何參數調用RefreshInvalidate ,那么您就是在使整個 for 無效,這意味着將重新繪制整個表單。 屏幕上像素的重繪實際上是過程中較慢的部分,因此您需要將這部分保持在最低限度。 這意味着,當您的游戲板上發生某些變化時,您需要計算包含所有可能變化的最小區域,並在調用Invalidate時指定該區域。 這將減少重新繪制的數量並加快該過程。

請注意,您不需要更改繪圖代碼。 您總是繪制所有內容,然后系統將繪制您之前無效的表格部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM