Partager via


RenderTargetBitmap Classe

Définition

Représente une source d’image qui peut être remplie avec le contenu combiné d’une arborescence visuelle XAML. Consultez certaines limitations notables sur les visuels XAML qui peuvent être capturés dans un RenderTargetBitmap.

public ref class RenderTargetBitmap sealed : ImageSource
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class RenderTargetBitmap final : ImageSource
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class RenderTargetBitmap : ImageSource
Public NotInheritable Class RenderTargetBitmap
Inherits ImageSource
Héritage
Object Platform::Object IInspectable DependencyObject ImageSource RenderTargetBitmap
Attributs

Exemples

Ce plan de code de base est adapté à partir du premier scénario XAML et du code du rendu XAML à l’exemple bitmap. Notez comment tout le code, même le constructeur, se trouve dans une méthode asynchrone. Voici un gestionnaire d’événements pour un bouton sur lequel un utilisateur clique pour lancer la demande de rendu.

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

Remarques

À l’aide d’un RenderTargetBitmap, vous pouvez accomplir des scénarios tels que l’application d’effets d’image à un visuel provenant d’une composition d’interface utilisateur XAML, la génération d’images miniatures de pages enfants pour un système de navigation ou l’activation de l’utilisateur pour enregistrer des parties de l’interface utilisateur en tant que source d’image, puis partager cette image avec d’autres applications.

Étant donné que RenderTargetBitmap est une sous-classe de ImageSource, elle peut être utilisée comme source d’image pour éléments Image ou un pinceau ImageBrush .

L’appel renderAsync fournit une source d’image utile, mais la représentation tampon complète du contenu de rendu n’est pas copiée en mémoire vidéo tant que l’application n’appelle GetPixelsAsync. Il est plus rapide d’appeler RenderAsync uniquement (sans appeler GetPixelsAsync) et utiliser renderTargetBitmap comme Image ou ImageBrush source si l’application envisage uniquement d’afficher le contenu rendu et n’a pas besoin des données de pixels. Vous avez probablement besoin des données de pixel si vous envisagez de capturer l’image pour une opération de DataTransferManager telle qu’un échange de contrat de partage, ou si vous souhaitez appliquer des effets à l’image ou le transcodez à l’aide de l’API Windows.Graphics.Imaging.

L’API RenderTargetBitmap que vous utiliserez le plus souvent est RenderAsync. Il existe deux surcharges de cette méthode : RenderAsync(UIElement) et une autre surcharge où vous pouvez spécifier les dimensions souhaitées de la source d’image pour être différentes de la taille naturelle de l’arborescence visuelle source. RenderAsync est une méthode asynchrone par conception. Par conséquent, il n’existe aucune garantie de synchronisation exacte des images avec la source de l’interface utilisateur, mais il est assez proche du minutage pour la plupart des scénarios.

Un objet RenderTargetBitmap n’est généralement pas déclaré dans une interface utilisateur XAML, car vous devez appeler RenderAsync dans le code avant d’avoir une instance utile remplie d’images de RenderTargetBitmap à des fins d’affichage de l’interface utilisateur.

Pour plus d’exemples de code d’utilisation de RenderTargetBitmap, consultez rendu XAML sur un exemple de bitmap.

Le contenu d’un RenderTargetBitmap peut être perdu dans de rares cas en raison de l’interaction avec d’autres systèmes de niveau inférieur, par exemple si le pilote vidéo est réinitialisé dans le cadre d’une récupération (voir détection de délai d’attente et récupération (TDR)). Dans ce cas, l’événement CompositionTarget.SurfaceContentsLost se déclenche. Pour tenir compte de ce cas et des cas similaires de perte d’informations, les applications doivent écouter l’événement CompositionTarget.SurfaceContentsLost et restituer à nouveau le contenu d’un RenderTargetBitmap en appelant RenderAsync.

Le contenu bitmap rendu d’un RenderTargetBitmap ne se met pas automatiquement à l’échelle lorsque le paramètre PPP actuel change. Les applications doivent réactiver le contenu d’un RenderTargetBitmap lorsque le paramètre PPP de l’affichage actuel change afin de s’assurer que le contenu du vecteur rendu reste net. Par exemple, un redimensionnement peut se produire si l’utilisateur déplace une application entre deux moniteurs s’exécutant à un paramètre DPI différent. Envisagez d’écouter l’événement DisplayInformation.DpiChanged pour détecter ces cas.

La taille de rendu maximale d’une arborescence visuelle XAML est limitée par les dimensions maximales d’une texture Microsoft DirectX ; Pour plus d’informations, consultez limites des ressources (Direct3D 11). Cette limite peut varier en fonction du matériel sur lequel l’application s’exécute. Un contenu très volumineux qui dépasse cette limite peut être mis à l’échelle pour s’adapter. Si les limites de mise à l’échelle sont appliquées de cette façon, la taille rendue après la mise à l’échelle peut être interrogée à l’aide des propriétés PixelWidth et PixelHeight. Par exemple, une arborescence visuelle XAML de 1 0000 pixels de 1 000 pixels peut être mise à l’échelle à 4096 par 4096 pixels, un exemple de limite particulière, comme forcé par le matériel sur lequel l’application s’exécute.

Visuels XAML et fonctionnalités de capture RenderTargetBitmap

Il existe quelques scénarios pour le contenu visuel composé en XAML que vous ne pouvez pas capturer dans un RenderTargetBitmap :

  • Le contenu qui se trouve dans l’arborescence, mais avec son Visibilité défini sur réduit ne sera pas capturé.
  • Le contenu qui n’est pas directement connecté à l’arborescence visuelle XAML et le contenu de la fenêtre principale ne sera pas capturé. Cela inclut contenu de fenêtre contextuelle, qui est considéré comme une sous-fenêtre.
  • Le contenu qui ne peut pas être capturé apparaît comme vide dans l’image capturée, mais d’autres contenus de la même arborescence visuelle peuvent toujours être capturés et seront affichés (la présence de contenu qui ne peut pas être capturé n’invalidera pas la capture entière de cette composition XAML).
  • Le contenu qui se trouve dans l’arborescence visuelle XAML, mais hors écran peut être capturé, tant qu’il n’est pas Visibilité = réduit.

Constructeurs

RenderTargetBitmap()

Initialise une nouvelle instance de la classe RenderTargetBitmap.

Propriétés

Dispatcher

Retourne toujours null dans une application sdk d’application Windows. Utilisez DispatcherQueue à la place.

(Hérité de DependencyObject)
DispatcherQueue

Obtient le DispatcherQueue auquel cet objet est associé. L'DispatcherQueue représente une installation qui peut accéder à l'DependencyObject sur le thread d’interface utilisateur, même si le code est initié par un thread autre que l’interface utilisateur.

(Hérité de DependencyObject)
PixelHeight

Obtient la hauteur de la bitmap rendue en pixels.

PixelHeightProperty

Identifie la propriété de dépendance PixelHeight.

PixelWidth

Obtient la largeur de la bitmap rendue en pixels.

PixelWidthProperty

Identifie la propriété de dépendance PixelWidth.

Méthodes

ClearValue(DependencyProperty)

Efface la valeur locale d’une propriété de dépendance.

(Hérité de DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Retourne toute valeur de base établie pour une propriété de dépendance, qui s’applique dans les cas où une animation n’est pas active.

(Hérité de DependencyObject)
GetPixelsAsync()

Récupère l’image render renderTargetBitmap en tant que flux mis en mémoire tampon d’octets au format BGRA8.

GetValue(DependencyProperty)

Retourne la valeur effective actuelle d’une propriété de dépendance à partir d’une DependencyObject.

(Hérité de DependencyObject)
ReadLocalValue(DependencyProperty)

Retourne la valeur locale d’une propriété de dépendance, si une valeur locale est définie.

(Hérité de DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Inscrit une fonction de notification pour écouter les modifications apportées à un DependencyProperty spécifique sur cette instance DependencyObject.

(Hérité de DependencyObject)
RenderAsync(UIElement, Int32, Int32)

Affiche un instantané d’un élément UIElement 'arborescence visuelle sur une source d’image. Spécifiez des valeurs pour scaledWidth et scaledHeight pour modifier la dimension de rendu de la source d’origine.

RenderAsync(UIElement)

Affiche un instantané d’un élément UIElement 'arborescence visuelle sur une source d’image.

SetValue(DependencyProperty, Object)

Définit la valeur locale d’une propriété de dépendance sur un DependencyObject.

(Hérité de DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Annule une notification de modification précédemment inscrite en appelant RegisterPropertyChangedCallback.

(Hérité de DependencyObject)

S’applique à

Voir aussi