RenderTargetBitmap-Klasse

RenderTargetBitmap Class

Stellt eine Bildquelle dar, die mit den kombinierten Inhalten einer visuellen XAML-Struktur aufgefüllt werden kann. Informationen zu einigen wichtigen Einschränkungen bei der Aufzeichnung von grafischen XAML-Elementen in einer RenderTargetBitmap finden Sie unter Hinweise.

Vererbung

Object
  DependencyObject
    ImageSource
      RenderTargetBitmap

Syntax


public sealed class RenderTargetBitmap : ImageSource

Attribute

[MarshalingBehavior(Agile)]
[Threading(Both)]
[Version(0x06030000)]
[WebHostHidden()]

Member

RenderTargetBitmapKlasse hat diese Membertypen:

Konstruktoren

RenderTargetBitmapKlasse hat diese Konstruktoren.

KonstruktorBeschreibung
RenderTargetBitmap Initializes a new instance of the RenderTargetBitmap class.

 

Methoden

The RenderTargetBitmap Klasse hat diese Methoden. Es erbt auch Methoden von Object Klasse.

MethodeBeschreibung
ClearValue Clears the local value of a dependency property. (Geerbt von DependencyObject)
GetAnimationBaseValue Returns any base value established for a dependency property, which would apply in cases where an animation is not active. (Geerbt von DependencyObject)
GetPixelsAsync Retrieves the previously rendered RenderTargetBitmap image as a buffered stream of bytes in BGRA8 format.
GetValue Returns the current effective value of a dependency property from a DependencyObject. (Geerbt von DependencyObject)
ReadLocalValue Returns the local value of a dependency property, if a local value is set. (Geerbt von DependencyObject)
RenderAsync(UIElement) Renders a snapshot of a UIElement visual tree to an image source.
RenderAsync(UIElement, Int32, Int32) Renders a snapshot of a UIElement visual tree to an image source. Specify values for scaledWidth and scaledHeight to alter the original source's rendering dimension.
SetValue Sets the local value of a dependency property on a DependencyObject. (Geerbt von DependencyObject)

 

Eigenschaften

Der RenderTargetBitmapKlasse hat diese Eigenschaften.

EigenschaftZugriffstypBeschreibung

Dispatcher

SchreibgeschütztGets the CoreDispatcher that this object is associated with. (Geerbt von DependencyObject)

PixelHeight

SchreibgeschütztGets the height of the rendered bitmap in pixels.

PixelHeightProperty

SchreibgeschütztIdentifies the PixelHeight dependency property.

PixelWidth

SchreibgeschütztGets the width of the rendered bitmap in pixels.

PixelWidthProperty

SchreibgeschütztIdentifies the PixelWidth dependency property.

 

Hinweise

Mit einem RenderTargetBitmap können Sie Szenarien erzeugen, wie das Anwenden von Bildeffekten auf visuelle Elemente, die ursprünglich aus einer XAML-Benutzeroberflächenkomposition stammen, das Generieren von Miniaturbildern von untergeordneten Seiten oder das Bereitstellen der Option für Benutzer, Teile der Benutzeroberfläche als Bildquelle zu speichern und dieses Bild dann für andere Apps freizugeben.

Da RenderTargetBitmap eine Unterklasse von ImageSource ist, kann sie als Bildquelle für Image-Elemente oder einen ImageBrush-Pinsel verwendet werden.

Der Aufruf von RenderAsync stellt eine hilfreiche Bildquelle zur Verfügung, aber die vollständige Pufferdarstellung des Renderinginhalts wird solange nicht aus Videospeicher herauskopiert, bis die App GetPixelsAsync aufruft. Es geht schneller, nur RenderAsync (ohne GetPixelsAsync) aufzurufen und RenderTargetBitmap als Image- oder ImageBrush-Quelle zu verwenden, wenn die App nur dazu dient, den gerenderten Inhalt anzuzeigen, und keine Pixeldaten erfordert. Sie benötigen wahrscheinlich die Pixeldaten, wenn das Bild für einen DataTransferManager-Vorgang, wie z. B. einen Freigabenvertragsaustausch, aufzeichnen möchten, oder wenn Sie Effekte auf das Bild anwenden oder es mithilfe der Windows.Graphics.Imaging-API transcodieren möchten.

Die RenderTargetBitmap-API, die Sie am häufigsten verwenden, ist RenderAsync. Es gibt zwei Überladungen dieser Methode: RenderAsync(UIElement) und another overload, wobei Sie die gewünschten Dimensionen der Bildquelle so angeben können, dass sie anders sind als die natürliche Größe der visuellen Struktur der Quelle. RenderAsync ist eine asynchrone Methode nach Entwurf, sodass keine Garantie für eine genaue Framesynchronisierung mit der UI-Quelle besteht. Für die meisten Szenarien ist sie jedoch bezogen auf die zeitliche Steuerung ausreichend.

Ein RenderTargetBitmap-Objekt wird in der Regel nicht in einer XAML-UI deklariert, da Sie RenderAsync im Code aufrufen müssen, ehe Sie eine nützliche Bild-gefüllte Instanz von RenderTargetBitmap für die Anzeige auf der UI zur Verfügung haben.

Weitere Codebeispiele für die Verwendung der RenderTargetBitmap finden Sie unter Beispiel für das Rendern von XAML als Bitmap.

Der Inhalt einer RenderTargetBitmap kann aufgrund der Interaktion mit anderen Systemen von niedriger Ebene in seltenen Fällen verloren gehen, z. B. wenn der Videotreiber als Teil einer Wiederherstellung zurückgesetzt wird (siehe TDR (Timeout Detection and Recovery)). Wenn das geschieht, wird das CompositionTarget.SurfaceContentsLost-Ereignis ausgelöst. Um diesen und ähnliche Fälle mit Datenverlust zu berücksichtigen, sollten Apps auf das CompositionTarget.SurfaceContentsLost-Ereignis lauschen und die Inhalte eines RenderTargetBitmap neu rendern, indem RenderAsync erneut aufgerufen wird.

Die gerenderten Bitmap-Inhalte einer RenderTargetBitmap werden nicht automatisch skaliert, wenn sich die aktuellen DPI-Einstellungen ändern. Apps sollten den Inhalt eines RenderTargetBitmap erneut rendern, wenn sich die DPI-Einstellung der aktuellen Ansicht ändert, um sicherzustellen, dass der gerenderte Vektorinhalt klar bleibt. Die Größe kann beispielsweise geändert werden, wenn eine App zwischen zwei Bildschirmen mit unterschiedlicher DPI-Einstellung bewegt wird. Erwägen Sie, das DisplayInformation.DpiChanged-Ereignis zu überwachen, um diese Fälle zu erkennen.

Die maximal gerenderte Größe einer visuellen Struktur in XAML wird durch die maximalen Maße einer Microsoft DirectX-Textur eingeschränkt. Weitere Informationen finden Sie unter Ressourcengrenzen (Direct3D). Diese Beschränkung kann abhängig von der Hardware variieren, auf der die App ausgeführt wird. Sehr umfangreiche Inhalte, die diese Beschränkung überschreiten, werden möglicherweise durch Skalierung angepasst. Wenn Skalierungsgrenzen auf diese Weise angewendet werden, kann die gerenderte Größe nach der Skalierung mit den PixelWidth- und PixelHeight-Eigenschaften abgefragt werden. Beispielsweise kann eine visuelle XAML-Struktur mit 10000 mal 10000 Pixeln auf 4096 mal 4096 Pixel skaliert werden, ein Beispiel für eine bestimmte Begrenzung, die durch die Hardware erzwungen wird, auf der die App ausgeführt wird.

grafische XAML-Elemente und RenderTargetBitmap-Erfassungsfunktionen

Es gibt einige wenige Szenarien für in XAML erstellte visuelle Inhalte, die Sie nicht als RenderTargetBitmap erfassen können:

  • Videoinhalte in MediaElement oder CaptureElement können nicht mit RenderTargetBitmap erfasst werden. Dazu gehört, den Frame aus dem Videoinhalt aufzeichnen.
  • Benutzerdefinierter DirectX-Inhalt (Ihre eigene Swapchain) innerhalb eines SwapChainBackgroundPanel oder SwapChainPanel kann nicht mit RenderTargetBitmap aufgezeichnet werden.
  • Offscreen-Inhalt in der visuellen XAML-Struktur wird nicht aufgezeichnet. Inhalt in der Struktur, dessen Visibility auf Collapsed festgelegt ist, wird nicht aufgezeichnet.
  • Inhalt, der nicht direkt mit der visuellen XAML-Struktur verbunden ist, sowie Inhalt des Hauptfensters wird nicht aufgezeichnet. Dies umfasst Popup-Inhalte, die wie ein untergeordnetes Fenster betrachtet werden.
  • Nicht erfassbarer Inhalt wird im aufgezeichneten Bild als leer angezeigt, aber anderer Inhalt in derselben visuellen Struktur kann nach wie vor erfasst werden und wird gerendert (nicht erfassbarer Inhalt macht die gesamte Erfassung dieser XAML-Komposition nicht ungültig).

Beispiele

Diese Grundcodegliederung wird vom ersten Szenario-XAML und -Code aus dem XAML-Render abgeleitet, um Beispiel als Bitmap zu rendern. Beachten Sie, dass sich der gesamte Code, sogar der Konstruktor, innerhalb einer async-Methode befindet. Hier ist ein Ereignishandler für eine Schaltfläche, auf die ein Benutzer klickt, um die Renderinganforderung zu initiieren.


<StackPanel> 
  <Button Content="Save as image source" Click="SaveImageSource_Click" /> 
...
  <Grid x:Name="RenderedGrid" Height="500"/>
  <!--user adds child-item content to this Grid using other code, not shown-->
...
  <Image x:Name="RenderedImage" Stretch="None" />
  <!-- this Image has no Source yet, will be set by a RenderTargetBitmap.RenderAsync call --> 
</StackPanel> 



private async void SaveImageSource_Click(object sender, RoutedEventArgs e) 
{                        
...
    RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
    await renderTargetBitmap.RenderAsync(RenderedGrid, width, height); 
    RenderedImage.Source = renderTargetBitmap; 
}

Anforderungen

Mindestens unterstützter Client

Windows 8.1 [Nur Windows Store-Apps]

Mindestens unterstützter Server

Windows Server 2012 R2 [Nur Windows Store-Apps]

Namespace

Windows.UI.Xaml.Media.Imaging
Windows::UI::Xaml::Media::Imaging [C++]

Metadaten

Windows.winmd

Siehe auch

ImageSource
Beispiel für das Rendern von XAML als Bitmap
Schnellstart: Image und ImageBrush
RenderAsync(UIElement)

 

 

Anzeigen:
© 2017 Microsoft