HOW TO:避免自動縮放以提高效能
更新:2007 年 11 月
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 DPI) 與儲存於 Image 物件的解析度不同,則 DrawImage 方法會縮放影像。例如,假設 Image 物件的寬度為 216 像素,並且儲存的水平解析度值為 72 DPI。因為 216 除以 72 等於 3,所以 DrawImage 會縮放影像,將影像寬度調整為 3 英吋,解析度為 96 DPI。也就是說,DrawImage 所顯示的影像寬度為 96x3 = 288 像素。
即使您的螢幕解析度不是 96 DPI,GDI+ 可能還是會將螢幕解析度當做是 96 DPI 來縮放影像。那是因為 GDI+Graphics 物件與裝置內容有關,並且在 GDI+ 查詢裝置內容以取得螢幕解析度時,不論實際螢幕解析度為何,結果通常是 96。您可以在 DrawImage 方法中指定目的端矩形以避免自動縮放。
範例
下列範例會繪製兩次相同的影像。第一種情況不指定目的端矩形的寬度和高度,而是自動縮放影像。第二種情況會將目的端矩形的寬度和高度 (以像素為單位) 指定成與原始影像的寬度和高度相同。下圖顯示的是呈現兩次的影像。
Dim image As New Bitmap("Texture.jpg")
e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)
Image image = new Bitmap("Texture.jpg");
e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);
編譯程式碼
上述範例是專為與 Windows Form 搭配使用而設計的,而且它需要 PaintEventArgs e (即 Paint 事件處理常式的參數)。以系統中有效的影像名稱及路徑取代 Texture.jpg。