Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
WPF poskytuje širokou škálu 2D grafických a imagingových funkcí, které je možné optimalizovat pro požadavky vaší aplikace. Toto téma obsahuje informace o optimalizaci výkonu v těchto oblastech.
Kreslení a obrazce
WPF poskytuje jak DrawingShape objekty, tak i objekty, které představují grafický obsah výkresu. Drawing Objekty jsou však jednodušší konstrukce než Shape objekty a poskytují lepší charakteristiky výkonu.
A Shape umožňuje nakreslit grafický obrazec na obrazovku. Vzhledem k tomu, že jsou odvozeny z FrameworkElement třídy, lze objekty Shape použít uvnitř panelů a většiny ovládacích prvků.
WPF nabízí několik vrstev přístupu k grafickým a vykreslovacím službám. V horní vrstvě Shape jsou objekty snadno použitelné a poskytují mnoho užitečných funkcí, jako je rozložení a zpracování událostí. WPF poskytuje řadu objektů obrazců připravených k použití. Všechny objekty obrazce dědí z Shape třídy. Mezi dostupné objekty obrazce patří Ellipse, , LinePath, Polygon, Polyline, a Rectangle.
Drawing oproti tomu neodvozují z FrameworkElement třídy a poskytují lehčí implementaci pro vykreslování obrazců, obrázků a textu.
Existují čtyři typy Drawing objektů:
GeometryDrawing Nakreslí obrazec.
ImageDrawing Nakreslí obrázek.
GlyphRunDrawing Zobrazuje text.
DrawingGroup Nakreslí další kresby. Pomocí skupiny výkresů můžete zkombinovat jiné výkresy do jednoho složeného výkresu.
Objekt GeometryDrawing se používá k vykreslení obsahu geometrie. Třída Geometry a konkrétní třídy, které jsou z ní odvozeny, jako například CombinedGeometry, EllipseGeometry a PathGeometry, poskytují prostředky pro vykreslování 2D grafiky a podporu pro hit-testování a ořezávání. Objekty geometrie lze použít k definování oblasti ovládacího prvku nebo například k definování oblasti oříznutí, která se má použít na obrázek. Objekty geometrie můžou být jednoduché oblasti, jako jsou obdélníky a kruhy nebo složené oblasti vytvořené ze dvou nebo více objektů geometrie. Složitější geometrické oblasti lze vytvořit kombinací PathSegment-odvozených objektů, jako ArcSegmentje , BezierSegmenta QuadraticBezierSegment.
Na první pohled jsou třída Geometry a třída Shape podobné. Oba se používají při vykreslování 2D grafiky a oba mají podobné konkrétní třídy, které jsou odvozeny od nich, EllipseGeometry například a Ellipse. Mezi těmito dvěma sadami tříd však existují důležité rozdíly. V jedné Geometry třídě chybí některé funkce Shape třídy, jako je například schopnost kreslit sám sebe. Chcete-li nakreslit objekt geometrie, je třeba použít jinou třídu, jako je DrawingContext, Drawing nebo Path (stojí za zmínku, že Path je obrazec), která provede operaci kreslení. Vlastnosti vykreslování, jako je výplň, tah a tloušťka tahu, jsou ve třídě, která nakreslí objekt geometrie, zatímco objekt obrazce tyto vlastnosti obsahuje. Jedním ze způsobů, jak si tento rozdíl představit, je, že objekt geometrie definuje oblast, například kruh, zatímco objekt obrazce definuje oblast, definuje, jak je tato oblast vyplněná a nastíněná, a účastní se systému rozložení.
Vzhledem k tomu, že Shape objekty jsou odvozeny z FrameworkElement třídy, jejich použití může v aplikaci výrazně více spotřebovat paměť. Pokud ve skutečnosti nepotřebujete funkce grafického FrameworkElement obsahu, zvažte použití světlejších Drawing objektů.
Další informace o Drawing objektech naleznete v tématu Přehled nakreslených objektů.
Objekty StreamGeometry
Objekt StreamGeometry je jednoduchá alternativa k PathGeometry vytváření geometrických obrazců. StreamGeometry Použijte, když potřebujete popsat složitou geometrii. StreamGeometry je optimalizovaná pro zpracování mnoha PathGeometry objektů a funguje lépe v porovnání s použitím mnoha jednotlivých PathGeometry objektů.
Následující příklad používá syntaxi atributů k vytvoření trojúhelníkového StreamGeometry v XAML.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<Path Data="F0 M10,100 L100,100 100,50Z"
StrokeThickness="1" Stroke="Black"/>
</StackPanel>
</Page>
Další informace o StreamGeometry objektech naleznete v tématu Vytvoření obrazce pomocí StreamGeometry.
DrawingVisual – objekty
Objekt DrawingVisual je jednoduchá třída kreslení, která se používá k vykreslení obrazců, obrázků nebo textu. Tato třída je považována za lehkou, protože neposkytuje rozložení ani zpracování událostí, což zlepšuje její výkon. Z tohoto důvodu jsou kresby ideální pro pozadí a klipart. Další informace naleznete v tématu Použití objektů DrawingVisual.
Obrázky
Zobrazení WPF poskytuje významné vylepšení možností zobrazení oproti starším verzím Windows. Možnosti vytváření obrázků, jako je například zobrazení rastrového obrázku nebo použití obrázku na společném ovládacím prvku, byly primárně zpracovávány rozhraním API (Microsoft Windows Graphics Device Interface) nebo rozhraním API (Microsoft Windows GDI+). Tato rozhraní API poskytují základní funkce pro vytváření obrázků, ale chybí jim funkce, jako je podpora rozšiřitelnosti kodeků a podpora obrázků s vysokou věrností. Rozhraní WPF Imaging API byla přepracována tak, aby překončila nedostatky rozhraní GDI a GDI+ a poskytovala novou sadu rozhraní API pro zobrazování a používání obrázků v aplikacích.
Při používání obrázků zvažte následující doporučení ke zlepšení výkonu:
Pokud vaše aplikace vyžaduje zobrazení miniatur obrázků, zvažte vytvoření zmenšené verze obrázku. WpF ve výchozím nastavení načte vaši image a dekóduje ji na plnou velikost. Pokud chcete jenom verzi miniatury obrázku, WPF zbytečně dekóduje obrázek na jeho plnou velikost a pak ho zmenší na velikost miniatury. Abyste se vyhnuli zbytečným režijním nákladům, můžete buď požádat WPF o dekódování obrázku na velikost miniatury, nebo požádat WPF o načtení obrázku velikosti miniatury.
Vždy dekódujte obrázek na požadovanou velikost a ne na výchozí velikost. Jak je uvedeno výše, požádejte WPF o dekódování obrázku na požadovanou velikost, a ne na výchozí úplnou velikost. Snížíte nejen pracovní sadu aplikace, ale také rychlost provádění.
Pokud je to možné, zkombinujte obrázky do jednoho obrázku, jako je například filmový pruh složený z více obrázků.
Další informace naleznete v tématu Přehled zobrazování.
Režim škálování bitmapy
Při animaci měřítka libovolného rastrového obrázku může výchozí vysoce kvalitní algoritmus převzorkování obrázků někdy spotřebovávat dostatečné systémové prostředky, aby způsobil snížení frekvence snímků, což efektivně způsobuje zadržování animací. Nastavením vlastnosti BitmapScalingMode objektu RenderOptions na LowQuality můžete při zvětšení nebo zmenšení rastrového obrázku vytvořit plynulejší animaci. LowQuality režim říká vykreslovacímu modulu WPF, aby při zpracování obrázků přepnul z algoritmu optimalizovaného pro kvalitu na algoritmus optimalizovaný rychlostí.
Následující příklad ukazuje, jak nastavit BitmapScalingMode pro obrázek.
// Set the bitmap scaling mode for the image to render faster.
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality);
' Set the bitmap scaling mode for the image to render faster.
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.LowQuality)
Ukládání do mezipaměti
WpF ve výchozím nastavení neukládá vykreslený obsah TileBrush objektů do mezipaměti, například DrawingBrush a VisualBrush. Ve statických scénářích, kdy se obsah nebo použití TileBrush scény nemění, to dává smysl, protože šetří paměť videa. Nedává to tolik smysl, když se statický obsah v TileBrush používá nestatickým způsobem – například když je statický DrawingBrush nebo VisualBrush mapován na povrch otočného 3D objektu. Výchozím chováním WPF je překreslit celý obsah DrawingBrush nebo VisualBrush pro každý rámec, i když se obsah nemění.
Nastavením vlastnosti CachingHint objektu RenderOptions na Cache můžete zvýšit výkon pomocí verzí uložených v mezipaměti dlaždicových štětců objektů.
Hodnoty vlastností CacheInvalidationThresholdMinimum a CacheInvalidationThresholdMaximum jsou relativními hodnotami velikosti, které určují, kdy by měl být objekt TileBrush znovu vygenerován kvůli změnám měřítka. Například nastavením CacheInvalidationThresholdMaximum vlastnosti na hodnotu 2,0 je třeba znovu vygenerovat mezipaměť TileBrush pouze v případě, že jeho velikost překročí dvojnásobek velikosti aktuální mezipaměti.
Následující příklad ukazuje, jak použít možnost nápovědy pro ukládání do mezipaměti pro DrawingBrush.
DrawingBrush drawingBrush = new DrawingBrush();
// Set the caching hint option for the brush.
RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache);
// Set the minimum and maximum relative sizes for regenerating the tiled brush.
// The tiled brush will be regenerated and re-cached when its size is
// 0.5x or 2x of the current cached size.
RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5);
RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0);
Dim drawingBrush As New DrawingBrush()
' Set the caching hint option for the brush.
RenderOptions.SetCachingHint(drawingBrush, CachingHint.Cache)
' Set the minimum and maximum relative sizes for regenerating the tiled brush.
' The tiled brush will be regenerated and re-cached when its size is
' 0.5x or 2x of the current cached size.
RenderOptions.SetCacheInvalidationThresholdMinimum(drawingBrush, 0.5)
RenderOptions.SetCacheInvalidationThresholdMaximum(drawingBrush, 2.0)
Viz také
.NET Desktop feedback