Optimieren der Leistung: 2D-Grafiken und BildverarbeitungOptimizing Performance: 2D Graphics and Imaging

WPFWPF stellt zahlreiche Funktionen für 2D-Grafiken und Bildverarbeitung zur Verfügung, die den Anforderungen Ihrer Anwendung entsprechend optimiert werden können.provides a wide range of 2D graphics and imaging functionality that can be optimized for your application requirements. Dieses Thema enthält Informationen über die Leistungsoptimierung in diesen Bereichen.This topic provides information about performance optimization in those areas.

Zeichnen und FormenDrawing and Shapes

WPFWPFstellt sowohl Drawing - Shape als auch-Objekte zur Darstellung von grafischer Zeichnungs Inhalt bereit.provides both Drawing and Shape objects to represent graphical drawing content. Objekte sind jedoch einfachere Konstrukte als Shape Objekte und bieten bessere Leistungsmerkmale. DrawingHowever, Drawing objects are simpler constructs than Shape objects and provide better performance characteristics.

Mit Shape einem können Sie eine grafische Form auf dem Bildschirm zeichnen.A Shape allows you to draw a graphical shape to the screen. Da Sie von der FrameworkElement -Klasse abgeleitet sind, Shape können-Objekte in Bereichen und den meisten Steuerelementen verwendet werden.Because they are derived from the FrameworkElement class, Shape objects can be used inside panels and most controls.

WPFWPF bietet mehrere Ebenen für den Zugriff auf Grafiken und Renderingdienste.offers several layers of access to graphics and rendering services. Auf der obersten Ebene Shape sind-Objekte einfach zu verwenden und bieten zahlreiche nützliche Features wie Layout und Ereignis Behandlung.At the top layer, Shape objects are easy to use and provide many useful features, such as layout and event handling. WPFWPF stellt eine Reihe von vorgefertigten Shape-Objekten zur Verfügung.provides a number of ready-to-use shape objects. Alle Shape-Objekte erben von Shape der-Klasse.All shape objects inherit from the Shape class. Zu den verfügbaren EllipseShape-Objekten zählen Polyline Path, Line, Rectangle, Polygon, und.Available shape objects include Ellipse, Line, Path, Polygon, Polyline, and Rectangle.

DrawingObjekte hingegen werden nicht von der FrameworkElement -Klasse abgeleitet und bieten eine einfachere Implementierung zum Rendern von Formen, Bildern und Text.Drawing objects, on the other hand, do not derive from the FrameworkElement class and provide a lighter-weight implementation for rendering shapes, images, and text.

Es gibt vier Arten von Drawing Objekten:There are four types of Drawing objects:

Das GeometryDrawing -Objekt wird zum Rendering von Geometrie Inhalten verwendet.The GeometryDrawing object is used to render geometry content. Die Geometry -Klasse und die konkreten Klassen, die von ihr abgeleitet werden CombinedGeometry, EllipseGeometryz. PathGeometryb., und, bieten eine Möglichkeit zum Rendern von 2D-Grafiken sowie zum Bereitstellen von Treffer Tests und Clipping-Unterstützung.The Geometry class and the concrete classes which derive from it, such as CombinedGeometry, EllipseGeometry, and PathGeometry, provide a means for rendering 2D graphics, as well as providing hit-testing and clipping support. Mit Geometry-Objekten können beispielsweise der Bereich eines Steuerelements oder der auf ein Bild anzuwendende Clip-Bereich definiert werden.Geometry objects can be used to define the region of a control, for example, or to define the clip region to apply to an image. Bei Geometry-Objekten kann es sich um einfache Bereiche wie Rechtecke und Kreise oder um aus einem oder mehreren geometrischen Objekten zusammengesetzte Regionen handeln.Geometry objects can be simple regions, such as rectangles and circles, or composite regions created from two or more geometry objects. Komplexere geometrische Bereiche können erstellt werden, indem von PathSegmentabgeleitete Objekte kombiniert werden, ArcSegmentwie BezierSegmentz. QuadraticBezierSegmentb., und.More complex geometric regions can be created by combining PathSegment-derived objects, such as ArcSegment, BezierSegment, and QuadraticBezierSegment.

Auf der-Oberfläche Geometry sind die- Shape Klasse und die-Klasse sehr ähnlich.On the surface, the Geometry class and the Shape class are quite similar. Beide werden beim Rendern von 2D-Grafiken verwendet, und beide verfügen über ähnliche konkrete Klassen, die von Ihnen abgeleitet EllipseGeometry werden Ellipse, z. b. und.Both are used in the rendering of 2D graphics and both have similar concrete classes which derive from them, for example, EllipseGeometry and Ellipse. Es gibt jedoch wichtige Unterschiede zwischen diesen zwei Sätzen von Klassen.However, there are important differences between these two sets of classes. Für eine der Klassen Geometry fehlt die Funktion Shape der-Klasse, z. b. die Fähigkeit, sich selbst zu zeichnen.For one, the Geometry class lacks some of the functionality of the Shape class, such as the ability to draw itself. Zum Zeichnen eines Geometry-Objekts muss eine andere Klasse, beispielsweise DrawingContext, Drawing oder Path (dabei ist zu beachten, dass ein Path eine Shape ist), verwendet werden, um den Zeichnungsvorgang auszuführen.To draw a geometry object, another class such as DrawingContext, Drawing, or a Path (it is worth noting that a Path is a Shape) must be used to perform the drawing operation. Renderingeigenschaften wie Füllung, Strich und Strichstärke befinden sich in der Klasse, die das Geometry-Objekt zeichnet, während ein Shape-Objekt diese Eigenschaften enthält.Rendering properties such as fill, stroke, and the stroke thickness are on the class which draws the geometry object, while a shape object contains these properties. Eine Möglichkeit zur Annäherung an diesen Unterschied besteht darin, dass ein Geometry-Objekt einen Bereich definiert, z.B. einen Kreis, während ein Shape-Objekt definiert, wie dieser Bereich gefüllt und konturiert wird und eine Komponente des Layoutsystems ist.One way to think of this difference is that a geometry object defines a region, a circle for example, while a shape object defines a region, defines how that region is filled and outlined, and participates in the layout system.

Da Shape Objekte von der FrameworkElement -Klasse abgeleitet werden, kann die Verwendung der Objekte deutlich mehr Arbeitsspeicher Auslastung in Ihrer Anwendung zur Verfügung stehen.Since Shape objects derive from the FrameworkElement class, using them can add significantly more memory consumption in your application. Wenn Sie die FrameworkElement Funktionen für Ihre grafischen Inhalte wirklich nicht benötigen, sollten Sie die Verwendung der Objekte mit Drawing heller Gewichtung in Erwägung gezogen.If you really do not need the FrameworkElement features for your graphical content, consider using the lighter-weight Drawing objects.

Weitere Informationen zu Drawing Objekten finden Sie unter Übersicht über Zeichnungsobjekte.For more information on Drawing objects, see Drawing Objects Overview.

StreamGeometry-ObjekteStreamGeometry Objects

Das StreamGeometry -Objekt ist eine vereinfachte Alternative PathGeometry zu zum Erstellen geometrischer Formen.The StreamGeometry object is a lightweight alternative to PathGeometry for creating geometric shapes. Verwenden Sie, wenn Sie eine komplexe Geometrie beschreiben müssen. StreamGeometryUse a StreamGeometry when you need to describe a complex geometry. StreamGeometryist für die Verarbeitung vieler PathGeometry -Objekte optimiert und verbessert sich im Vergleich zur Verwendung PathGeometry vieler einzelner Objekte.StreamGeometry is optimized for handling many PathGeometry objects and performs better when compared to using many individual PathGeometry objects.

Im folgenden Beispiel wird die-Attribut Syntax verwendet, StreamGeometry um XAMLXAMLeine dreieckige in zu erstellen.The following example uses attribute syntax to create a triangular StreamGeometry in XAMLXAML.

<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>

Weitere Informationen zu StreamGeometry Objekten finden Sie unter Erstellen einer Form mithilfe von StreamGeometry.For more information on StreamGeometry objects, see Create a Shape Using a StreamGeometry.

DrawingVisual-ObjekteDrawingVisual Objects

Das DrawingVisual -Objekt ist eine vereinfachte Zeichnungs Klasse, die zum Rendering von Formen, Bildern oder Text verwendet wird.The DrawingVisual object is a lightweight drawing class that is used to render shapes, images, or text. Diese Klasse wird als einfach angesehen, weil sie weder Layout noch Ereignisbehandlung bereitstellt. Dadurch wird die Leistung gesteigert.This class is considered lightweight because it does not provide layout or event handling, which improves its performance. Aus diesem Grund sind Zeichnungen für Hintergründe und ClipArt ideal.For this reason, drawings are ideal for backgrounds and clip art. Weitere Informationen finden Sie unter Verwenden von DrawingVisual-Objekten.For more information, see Using DrawingVisual Objects.

BilderImages

WPFWPFdie Abbild Erstellung bietet eine bedeutende Verbesserung gegenüber den Abbild Erstellungs Funktionen in früheren Versionen von Windows.imaging provides a significant improvement over the imaging capabilities in previous versions of Windows. Die Bildverarbeitungsfähigkeiten wie das Anzeigen einer Bitmap oder das Verwenden eines Bilds für ein allgemeines Steuerelement wurden hauptsächlich von Microsoft Windows Graphics Device Interface (GDI) oder der Microsoft Windows GDI+-API behandelt.Imaging capabilities, such as displaying a bitmap or using an image on a common control were primarily handled by the Microsoft Windows Graphics Device Interface (GDI) or Microsoft Windows GDI+ application programming interface (API). Diese API hat Baseline-Bildverarbeitungsfunktionen bereitgestellt, hatte aber keine Features wie die Unterstützung von Codec-Erweiterbarkeit und hochwertigen Bildern.These API provided baseline imaging functionality, but lacked features such as support for codec extensibility and high fidelity image support. Die WPF-Bildverarbeitungs-APIs wurden neu entworfen, um die Nachteile von GDI und GDI+ zu beheben und einen neuen Satz von APIs bereitzustellen, um Bilder in den Anwendungen anzeigen und verwenden können.WPF Imaging API have been redesigned to overcome the shortcomings of GDI and GDI+ and provide a new set of API to display and use images within your applications.

Beim Verwenden von Bildern sollten Sie die folgenden Empfehlungen in Betracht ziehen, um eine bessere Leistung zu erzielen:When using images, consider the following recommendations for gaining better performance:

  • Wenn Ihre Anwendung die Anzeige von Miniaturbildern erfordert, ist das Erstellen einer Bildversion in reduzierter Größe ratsam.If your application requires you to display thumbnail images, consider creating a reduced-sized version of the image. Standardmäßig lädt WPFWPF das Bild und decodiert es in seine vollständige Größe.By default, WPFWPF loads your image and decodes it to its full size. Wenn Sie nur eine Miniaturansicht des Bilds möchten, decodiert WPFWPF das Bild überflüssigerweise in seine vollständige Größe und skaliert es dann auf die Größe der Miniaturansicht.If you only want a thumbnail version of the image, WPFWPF unnecessary decodes the image to its full-size and then scales it down to a thumbnail size. Um diesen unnötigen Aufwand zu vermeiden, können Sie entweder bei WPFWPF eine Decodierung des Bilds in Miniaturansichtgröße oder WPFWPF zum Laden eines Bilds in Miniaturansichtgröße auffordern.To avoid this unnecessary overhead, you can either request WPFWPF to decode the image to a thumbnail size, or request WPFWPF to load a thumbnail size image.

  • Decodieren Sie das Bild immer in die gewünschte Größe und nicht in die Standardgröße.Always decode the image to desired size and not to the default size. Wie bereits erwähnt, fordern Sie bei WPFWPF eine Decodierung des Bilds in die gewünschte Größe und nicht in die vollständige Größe an.As mentioned above, request WPFWPF to decode your image to a desired size and not the default full size. Auf diese Weise reduzieren Sie nicht nur das Workingset der Anwendung, Sie erhöhen auch die Ausführungsgeschwindigkeit.You will reduce not only your application's working set, but execution speed as well.

  • Kombinieren Sie die Bilder nach Möglichkeit in einem Einzelbild (z.B. ein Filmstreifen, der sich aus mehreren Bildern zusammensetzt).If possible, combine the images into a single image, such as a film strip composed of multiple images.

  • Weitere Informationen finden Sie unter Übersicht über die Bildverarbeitung.For more information, see Imaging Overview.

BitmapScalingModeBitmapScalingMode

Beim Animieren der Skalierung von Bitmaps kann der Standardalgorithmus für das Resampling von Bildern hoher Qualität zuweilen einen solchen Umfang an Systemressourcen beanspruchen, dass eine Verringerung der Einzelbildrate auftritt und Animationen ruckartig wiedergegeben werden.When animating the scale of any bitmap, the default high-quality image re-sampling algorithm can sometimes consume sufficient system resources to cause frame rate degradation, effectively causing animations to stutter. Durch Festlegen der BitmapScalingMode -Eigenschaft RenderOptions des-Objekts LowQuality auf können Sie eine reibungslosere Animation erstellen, wenn Sie eine Bitmap skalieren.By setting the BitmapScalingMode property of the RenderOptions object to LowQuality you can create a smoother animation when scaling a bitmap. LowQualityder Modus weist WPFWPF die Rendering-Engine an, bei der Verarbeitung von Bildern von einem qualitätsoptimierten Algorithmus zu einem Geschwindigkeits optimierten Algorithmus zu wechseln.LowQuality mode tells the WPFWPF rendering engine to switch from a quality-optimized algorithm to a speed-optimized algorithm when processing images.

Im folgenden Beispiel wird gezeigt, wie die BitmapScalingMode für ein Bild Objekt festgelegt wird.The following example shows how to set the BitmapScalingMode for an image object.

// 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)

CachingHintCachingHint

Standardmäßig WPFWPF speichert den gerenderten Inhalt von TileBrush DrawingBrush -Objekten, z. b VisualBrush. und, nicht zwischen.By default, WPFWPF does not cache the rendered contents of TileBrush objects, such as DrawingBrush and VisualBrush. In statischen Szenarios, in denen weder der Inhalt noch TileBrush die Verwendung von in der Szene geändert wird, ist dies sinnvoll, da es den Videospeicher bewahrt.In static scenarios where neither the contents nor use of the TileBrush in the scene is changing, this makes sense, since it conserves video memory. Es ist nicht sinnvoll, wenn ein TileBrush mit statischem Inhalt auf nicht statische Weise verwendet wird, z. –. Wenn ein statisches DrawingBrush oder VisualBrush der Oberfläche eines rotierenden 3D-Objekts zugeordnet wird.It does not make as much sense when a TileBrush with static content is used in a non-static way—for example, when a static DrawingBrush or VisualBrush is mapped to the surface of a rotating 3D object. Das Standardverhalten von WPFWPF besteht darin, den gesamten Inhalt DrawingBrush des oder VisualBrush für jeden Frame erneut zu renderieren, auch wenn sich der Inhalt ändert.The default behavior of WPFWPF is to re-render the entire content of the DrawingBrush or VisualBrush for every frame, even though the content is unchanging.

Durch Festlegen der CachingHint -Eigenschaft RenderOptions des-Objekts Cache auf können Sie die Leistung steigern, indem Sie zwischengespeicherte Versionen der gekachelten Pinsel Objekte verwenden.By setting the CachingHint property of the RenderOptions object to Cache you can increase performance by using cached versions of the tiled brush objects.

Der CacheInvalidationThresholdMinimum - CacheInvalidationThresholdMaximum Eigenschafts Wert und der-Eigenschafts Wert sind TileBrush relative Größen Werte, die bestimmen, wann das Objekt aufgrund von Skalierungs Änderungen neu generiert werden soll.The CacheInvalidationThresholdMinimum and CacheInvalidationThresholdMaximum property values are relative size values that determine when the TileBrush object should be regenerated due to changes in scale. Wenn Sie z. b. CacheInvalidationThresholdMaximum die-Eigenschaft auf 2,0 festlegen, muss TileBrush der Cache für nur neu generiert werden, wenn seine Größe die doppelte Größe des aktuellen Caches überschreitet.For example, by setting the CacheInvalidationThresholdMaximum property to 2.0, the cache for the TileBrush only needs to be regenerated when its size exceeds twice the size of the current cache.

Im folgenden Beispiel wird gezeigt, wie die Option Caching Hint für einen DrawingBrushverwendet wird.The following example shows how to use the caching hint option for a 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)

Siehe auchSee also