Ten artykuł został przetłumaczony przez maszynę. Aby wyświetlić jego treść w języku angielskim, zaznacz pole wyboru Angielski. Możesz też wyświetlić angielski tekst w okienku wyskakującym, przesuwając wskaźnik myszy nad konkretny tekst”.
Tłumaczenie
Angielski

Porady: poprawianie wydajności dzięki unikaniu automatycznego skalowania

.NET Framework (current version)
 

GDI+ może automatycznie skalowania obrazu podczas rysowania, które może zmniejszyć wydajność. Alternatywnie, można kontrolować skalowanie obrazu przez przekazanie wymiary prostokąta docelowego do DrawImage metody.

Na przykład, następujące wywołanie do DrawImage Metoda określa lewego górnego rogu (50, 30), ale nie określa prostokąta docelowego.

e.Graphics.DrawImage(image, 50, 30);  // upper-left corner at (50, 30)

Mimo że jest to najprostszy wersja DrawImage Metoda jako liczbę wymagane argumenty nie jest zawsze najbardziej efektywny. Jeśli rozwiązanie używany przez GDI+ (zwykle 96 punktów na cal) różni się od rozdzielczości, przechowywane w Image obiektu, a następnie DrawImage Metoda będzie skaluje obraz. Załóżmy na przykład, Image obiekt ma szerokość 216 pikseli i wartości przechowywanej rozdzielczość pozioma 72 dpi. Ponieważ 216/72 jest 3, DrawImage będzie skaluje obraz, aby miała szerokość 3 cale w rozdzielczości 96 punktów na cal. Oznacza to, że DrawImage wyświetli obraz, który ma szerokość 96 x 3 = 288 pikseli.

Nawet jeśli rozdzielczość ekranu jest inny niż 96 punktów na cal, GDI+ będzie prawdopodobnie skalę obrazu tak, jakby były rozdzielczość ekranu 96 punktów na cal. Jest to spowodowane tym GDI+ Graphics obiekt jest skojarzony z kontekstu urządzenia i kiedy GDI+ zapytania kontekst urządzenia dla rozdzielczość ekranu, wynik jest zazwyczaj 96, niezależnie od rzeczywistej rozdzielczości.  Można uniknąć skalowania automatycznego, określając prostokąta docelowego w DrawImage metody.

Przykład

Poniższy przykład rysuje dwa razy ten sam obraz. W przypadku pierwszy szerokość i wysokość prostokąta docelowego nie zostaną określone, obraz jest automatycznie skalowany. W drugim przypadku szerokość i wysokość (mierzoną w pikselach) prostokąta docelowego są określane taka sama jak szerokość i wysokość oryginalnego obrazu. Na poniższej ilustracji przedstawiono obraz renderowane dwa razy.

Skalowana tekstura
Image image = new Bitmap("Texture.jpg");

e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);

Kompilowanie kodu

Poprzedni przykład jest przeznaczony do użytku z formularzy systemu Windows i wymaga PaintEventArgs e, który jest parametr Paint program obsługi zdarzeń. Zamień Texture.jpg obrazu nazwę i ścieżkę, które są prawidłowe w tym systemie.

Pokaż: