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 pour connaître certaines limitations notables quant aux visuels XAML pouvant être capturés dans un RenderTargetBitmap.
public ref class RenderTargetBitmap sealed : ImageSource
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class RenderTargetBitmap final : ImageSource
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class RenderTargetBitmap : ImageSource
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class RenderTargetBitmap : ImageSource
Public NotInheritable Class RenderTargetBitmap
Inherits ImageSource
- Héritage
- Attributs
Configuration requise pour Windows
Famille d’appareils |
Windows 10 (introduit dans 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (introduit dans v1.0)
|
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 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 hors 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 pixels. 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 exacte des images avec la source d’interface utilisateur, mais elle est suffisamment proche 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 un instance utile et rempli d’images de RenderTargetBitmap à des fins d’affichage de l’interface utilisateur.
Pour obtenir d’autres exemples de code d’utilisation de RenderTargetBitmap, consultez Exemple de rendu XAML en 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)). Dans ce cas, l’événement CompositionTarget.SurfaceContentsLost se déclenche. Pour tenir compte de ce cas et de cas de perte d’informations similaires, les applications doivent écouter l’événement CompositionTarget.SurfaceContentsLost et restituer à nouveau 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 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 exécutés avec un paramètre PPP 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 de 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 à 4 096 par 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 de la 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 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 qui est hors écran peut être capturé, tant qu’il n’est pas Réduit de visibilité = .
Constructeurs
RenderTargetBitmap() |
Initialise une nouvelle instance de la classe RenderTargetBitmap. |
Propriétés
Dispatcher |
Obtient le CoreDispatcher auquel cet objet est associé. CoreDispatcher représente une fonctionnalité qui peut accéder à 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’appliquerait 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 alpha prémultipliéBGRA8. |
GetValue(DependencyProperty) |
Retourne la valeur effective actuelle d’une propriété de dépendance à partir d’un 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) |