RenderTargetBitmap Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Représente une source d’image qui peut être remplie avec le contenu combiné d’une arborescence visuelle XAML. Consultez quelques limitations notables sur lesquelles les visuels XAML 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
- Attributs
Exemples
Ce plan de code de base est adapté à partir du premier scénario XAML et du code de l’exemple de rendu XAML en bitmap. Notez que tout le code, même le constructeur, se trouve dans une méthode asynchrone . Ici, il s’agit d’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 qui provient à l’origine d’une composition d’interface utilisateur XAML, la génération d’images miniatures de pages enfants pour un système de navigation ou la possibilité pour l’utilisateur d’enregistrer des parties de l’interface utilisateur en tant que source d’image, puis de partager cette image avec d’autres applications.
Étant donné que RenderTargetBitmap est une sous-classe d’ImageSource, il peut être utilisé comme source d’image pour les éléments Image ou comme pinceau ImageBrush .
L’appel de RenderAsync fournit une source d’image utile, mais la représentation de mémoire tampon complète du contenu de rendu n’est pas copiée à partir de la mémoire vidéo tant que l’application n’appelle pas GetPixelsAsync. Il est plus rapide d’appeler RenderAsync uniquement (sans appeler GetPixelsAsync) et d’utiliser renderTargetBitmap comme source Image ou ImageBrush si l’application a uniquement l’intention d’afficher le contenu rendu et n’a pas besoin des données de pixel. Vous avez probablement besoin des données de pixel si vous envisagez de capturer l’image pour une opération DataTransferManager telle qu’un échange de contrat de partage, ou si vous souhaitez appliquer des effets à l’image ou la transcoder à 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 dans laquelle vous pouvez spécifier les dimensions souhaitées de la source d’image pour qu’elles soient différentes de la taille naturelle de l’arborescence visuelle source. RenderAsync étant une méthode asynchrone par conception, il n’y a aucune garantie de synchronisation d’images exacte avec la source d’interface utilisateur, mais elle est suffisamment proche du moment 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 et remplie d’images de RenderTargetBitmap à des fins d’affichage de l’interface utilisateur.
Pour plus d’exemples de code d’utilisation de RenderTargetBitmap, consultez l’exemple de rendu XAML vers bitmap.
Le contenu d’un RenderTargetBitmap peut être perdu dans de rares cas en raison d’une 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 Timeout Detection and Recovery (TDR)). Si cela se produit, l’événement CompositionTarget.SurfaceContentsLost se déclenche. Pour tenir compte de ce cas et des cas de perte d’informations similaires, les applications doivent écouter l’événement CompositionTarget.SurfaceContentsLost et restituer le contenu d’un RenderTargetBitmap en appelant à nouveau RenderAsync .
Le contenu bitmap rendu d’un RenderTargetBitmap n’est pas automatiquement mis à l’échelle lorsque le paramètre PPP actuel change. Les applications doivent restituer à nouveau le contenu d’un RenderTargetBitmap lorsque le paramètre DPI de l’affichage actuel change afin de garantir que le contenu vectoriel 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 maximale rendue 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. Le 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 10 000 x 10 000 pixels peut être mise à l’échelle à 4096 x 4096 pixels, un exemple de limite particulière imposée 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 dont la visibilité est définie sur Réduite , ne sera pas capturé.
- Le contenu qui n’est pas directement connecté à l’arborescence visuelle XAML et le contenu de la fenêtre main ne sera pas capturé. Cela inclut le contenu contextuel , 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 rendus (la présence de contenu qui ne peut pas être capturé n’invalide 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 Réduit à la visibilité = réduite.
Constructeurs
RenderTargetBitmap() |
Initialise une nouvelle instance de la classe RenderTargetBitmap. |
Propriétés
Dispatcher |
Retourne |
DispatcherQueue |
Obtient le |
PixelHeight |
Obtient la hauteur de l’image bitmap rendue en pixels. |
PixelHeightProperty |
Identifie la propriété de dépendance PixelHeight . |
PixelWidth |
Obtient la largeur de l’image 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 RenderTargetBitmap précédemment rendue sous la forme d’un flux d’octets mis en mémoire tampon au format BGRA8 . |
GetValue(DependencyProperty) |
Retourne la valeur effective actuelle d’une propriété de dépendance à partir d’un objet 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 ce instance DependencyObject. (Hérité de DependencyObject) |
RenderAsync(UIElement) |
Restitue une instantané d’une arborescence visuelle UIElement dans une source d’image. |
RenderAsync(UIElement, Int32, Int32) |
Restitue une instantané d’une arborescence visuelle UIElement dans une source d’image. Spécifiez des valeurs pour scaledWidth et scaledHeight afin de modifier la dimension de rendu de la source d’origine. |
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) |