Postupy: Zvýšení výkonu zabráněním automatické změně měřítka

GDI+ může automaticky škálovat obrázek při kreslení, což by snížil výkon. Alternativně můžete řídit škálování obrázku předáním dimenzí cílového obdélníku metodě DrawImage .

Například následující volání DrawImage metody určuje levý horní roh (50, 30), ale nezadá cílový obdélník.

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

I když se jedná o nejjednodušší verzi DrawImage metody z hlediska počtu požadovaných argumentů, není nutně nejúčinnější. Pokud se rozlišení používané rozhraním GDI+ (obvykle 96 tečkami na palec) liší od rozlišení uloženého v objektu Image , DrawImage pak metoda škáluje obrázek. Předpokládejme například, že Image objekt má šířku 216 pixelů a uloženou hodnotu vodorovného rozlišení 72 bodů na paleč. Vzhledem k tomu, že 216/72 je 3, zvětší velikost obrázku tak, DrawImage aby byl šířka 3 palce v rozlišení 96 tečk na palec. To znamená, DrawImage že zobrazí obrázek, který má šířku 96 × 3 = 288 pixelů.

I když se rozlišení obrazovky liší od 96 teček na palec, GDI+ pravděpodobně škáluje obrázek tak, jako kdyby rozlišení obrazovky bylo 96 teček na palec. Důvodem je to, že objekt GDI+ Graphics je přidružený k kontextu zařízení a když GDI+ dotazuje kontext zařízení na rozlišení obrazovky, výsledek je obvykle 96 bez ohledu na skutečné rozlišení obrazovky. Automatickému škálování se můžete vyhnout zadáním cílového obdélníku DrawImage v metodě.

Příklad

Následující příklad nakreslí stejný obrázek dvakrát. V prvním případě není zadána šířka a výška cílového obdélníku a obrázek se automaticky škáluje. V druhém případě je šířka a výška (měřená v pixelech) cílového obdélníku určena tak, aby byla stejná jako šířka a výška původního obrázku. Následující obrázek znázorňuje obrázek vykreslovaný dvakrát:

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)

Probíhá kompilace kódu

Předchozí příklad je určen pro použití s model Windows Forms a vyžaduje PaintEventArgse, což je parametr Paint obslužné rutiny události. Nahraďte Texture.jpg názvem obrázku a cestou, které jsou platné ve vašem systému.

Viz také