如何:避免自動縮放以提高效能
GDI+ 可能會在您繪製影像時自動縮放影像,這會降低效能。 或者,您可以將目的地矩形的維度傳遞至 DrawImage 方法,以控制影像的縮放比例。
例如,對 方法的 DrawImage 下列呼叫會指定左上角 (50, 30), 但未指定目的矩形。
e.Graphics.DrawImage(image, 50, 30); // upper-left corner at (50, 30)
e.Graphics.DrawImage(image, 50, 30) ' upper-left corner at (50, 30)
雖然這是方法在必要引數數目方面最簡單的版本 DrawImage ,但不一定是最有效率的方法。 如果 GDI+ 所使用的解析度(通常是每英吋 96 點)與儲存在 物件中的 Image 解析度不同,則 DrawImage 方法會縮放影像。 例如,假設 Image 物件寬度為 216 圖元,且儲存的水準解析度值為每英吋 72 點。 因為 216/72 是 3,所以會縮放影像, DrawImage 使其寬度為 3 英吋,解析度為每英吋 96 點。 也就是說, DrawImage 會顯示寬度為 96x3 = 288 圖元的影像。
即使您的螢幕解析度與每英吋 96 點不同,GDI+ 可能會縮放影像,就像螢幕解析度為每英吋 96 點一樣。 這是因為 GDI+ 物件與裝置內容相關聯,而且當 GDI+ Graphics 查詢裝置內容的螢幕解析度時,無論實際螢幕解析度為何,結果通常是 96。 您可以藉由在 方法中 DrawImage 指定目的矩形來避免自動調整。
範例
下列範例會繪製相同的影像兩次。 在第一個案例中,不會指定目的矩形的寬度和高度,而且會自動縮放影像。 在第二個案例中,目的地矩形的寬度和高度(以圖元為單位)會指定為與原始影像的寬度和高度相同。 下圖顯示兩次轉譯的影像:
Image image = new Bitmap("Texture.jpg");
e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);
Dim image As New Bitmap("Texture.jpg")
e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)
編譯程式碼
上述範例是為了搭配 Windows Form 使用而設計,且其需要 PaintEventArgse
,這是 Paint 事件處理常式的參數。 將 Texture.jpg 取代為您系統上有效的影像名稱和路徑。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應