如何:避免自動縮放以提高效能

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 指定目的矩形來避免自動調整。

範例

下列範例會繪製相同的影像兩次。 在第一個案例中,不會指定目的矩形的寬度和高度,而且會自動縮放影像。 在第二個案例中,目的地矩形的寬度和高度(以圖元為單位)會指定為與原始影像的寬度和高度相同。 下圖顯示兩次轉譯的影像:

Screenshot that shows images with scaled texture.

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 取代為您系統上有效的影像名稱和路徑。

另請參閱