Classe RenderTargetBitmap

RenderTargetBitmap Class

Rappresenta un'origine di immagine che può essere popolata con il contenuto combinato di una struttura ad albero visuale XAML. Vedere Note per alcune limitazioni significative in cui gli elementi visivi XAML vengano acquisiti in un oggetto RenderTargetBitmap.

Ereditarietà

Object
  DependencyObject
    ImageSource
      RenderTargetBitmap

Sintassi


public sealed class RenderTargetBitmap : ImageSource

Attributi

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

Membri

RenderTargetBitmapClasse include questi tipi di membri:

Costruttori

RenderTargetBitmapClasse include questi costruttori.

CostruttoreDescrizione
RenderTargetBitmap Initializes a new instance of the RenderTargetBitmap class.

 

Metodi

The RenderTargetBitmap Classe dispone di tali metodi. Eredita inoltre i metodi da Object Classe.

MetodoDescrizione
ClearValue Clears the local value of a dependency property. (Ereditata da DependencyObject)
GetAnimationBaseValue Returns any base value established for a dependency property, which would apply in cases where an animation is not active. (Ereditata da 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. (Ereditata da DependencyObject)
ReadLocalValue Returns the local value of a dependency property, if a local value is set. (Ereditata da 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. (Ereditata da DependencyObject)

 

Proprietà

Classe dispone di tali proprietà. di RenderTargetBitmap

ProprietàTipo di accessoDescrizione

Dispatcher

Sola letturaGets the CoreDispatcher that this object is associated with. (Ereditata da DependencyObject)

PixelHeight

Sola letturaGets the height of the rendered bitmap in pixels.

PixelHeightProperty

Sola letturaIdentifies the PixelHeight dependency property.

PixelWidth

Sola letturaGets the width of the rendered bitmap in pixels.

PixelWidthProperty

Sola letturaIdentifies the PixelWidth dependency property.

 

Note

Utilizzando RenderTargetBitmap, è possibile realizzare scenari come l'applicazione di effetti di immagine a un elemento visivo originariamente proveniente da una composizione dell'interfaccia utente XAML, generando immagini di anteprima delle pagine figlio per un sistema di navigazione oppure consentendo all'utente di salvare parti dell'interfaccia utente come origine dell'immagine e quindi condividere tale immagine con altre applicazioni.

Poiché RenderTargetBitmap è una sottoclasse di ImageSource, può essere utilizzata come origine dell'immagine per gli elementi Image o un pennello ImageBrush.

Chiamando il metodo RenderAsync viene fornita un'origine immagine utile, tuttavia la rappresentazione completa del buffer del contenuto di rendering non viene copiata dalla memoria video fino alla chiamata al metodo GetPixelsAsync da parte dell'applicazione. È più veloce chiamare solo RenderAsync (senza chiamare GetPixelsAsync) e utilizzare l'oggetto RenderTargetBitmap come origine di Image o ImageBrush se lo scopo dell'applicazione è semplicemente di visualizzare il contenuto del rendering senza la necessità dei dati dei pixel. È probabile che siano necessari dati pixel se si desidera acquisire l'immagine per un'operazione DataTransferManager, ad esempio come uno scambio di contratto di condivisione o se si desidera applicare effetti all'immagine o per transcodificarlo utilizzando l'API Windows.Graphics.Imaging.

L'API RenderTargetBitmap che verrà utilizzata più spesso è RenderAsync. Esistono due overload di questo metodo: RenderAsync(UIElement) e another overload in cui è possibile specificare che le dimensioni desiderate dell'origine dell'immagine siano diverse dalle dimensioni originali dell'albero visuale di origine. RenderAsync è un metodo asincrono da progettazione, pertanto la sincronizzazione esatta dei frame con l'origine UI non è garantita, ma è sufficientemente tempestiva per la maggior parte degli scenari.

Un oggetto RenderTargetBitmap non viene in genere dichiarato in un'interfaccia utente XAML perché è necessario chiamare RenderAsync nel codice prima di avere un'istanza di RenderTargetBitmap utile e popolata di immagini per scopi di visualizzazione dell'interfaccia utente.

Per ulteriori esempi di codice che utilizzano RenderTargetBitmap, vedere rendering XAML nell'esempio di bitmap.

In rari casi è possibile perdere il contenuto di un oggetto RenderTargetBitmap a causa dell'interazione con altri sistemi di livello inferiore, ad esempio nel caso in cui il driver video viene reimpostato durante una procedura di ripristino (vedere Timeout Detection and Recovery (TDR)). In tal caso, l'evento CompositionTarget.SurfaceContentsLost verrà generato. Per risolvere un caso di questo tipo o casi di perdita di informazioni simili, le applicazioni devono ascoltare l'evento CompositionTarget.SurfaceContentsLost ed eseguire nuovamente il rendering di un RenderTargetBitmap chiamando di nuovo RenderAsync.

Il contenuto bitmap di cui è stato eseguito il rendering di un RenderTargetBitmap non viene ridimensionato automaticamente quando l'impostazione DPI corrente viene modificata. Le app devono eseguire nuovamente il rendering del contenuto RenderTargetBitmap quando l'impostazione DPI della visualizzazione corrente viene modificata per garantire che il contenuto del vettore di cui è stato eseguito il rendering continui a essere chiaro. Ad esempio, un ridimensionamento può verificarsi se l'utente sposta un'applicazione tra due monitor in esecuzione a un'impostazione DPI diversa. Si consideri l'ascolto dell'evento DisplayInformation.DpiChanged per rilevare questi casi.

La dimensione di rendering massima di un albero visuale XAML è limitata dalle dimensioni massime di uno strumento di trama Microsoft DirectX; per ulteriori informazioni vedere Limiti di risorse (Direct3D). Questo limite può variare a seconda dell'hardware sul quale viene eseguita l'applicazione. Il contenuto di grandi dimensioni che supera questo limite può essere ridimensionato per l'adattamento. Se si applicano i limiti di ridimensionamento in questo modo, è possibile eseguire una query della dimensione del rendering dopo il ridimensionamento utilizzando le proprietà PixelWidth e PixelHeight. Ad esempio, una struttura ad albero visuale XAML di 10000 per 10000 pixel può essere ridimensionata a 4096 per 4096 pixel, un esempio di un particolare limite impostato dall'hardware dove viene eseguita l'applicazione.

Elementi visivi XAML e funzionalità di acquisizione RenderTargetBitmap

Esistono alcuni scenari per il contenuto visivo costituito da XAML che non è possibile acquisire in un oggetto RenderTargetBitmap:

  • Il contenuto del video non può essere acquisito in MediaElement o CaptureElement utilizzando RenderTargetBitmap. Questo include l'acquisizione di fotogrammi dall'interno del contenuto video.
  • Il contenuto DirectX personalizzato (catena di scambio personalizzata) all'interno di SwapChainBackgroundPanel o SwapChainPanel non può essere acquisito mediante RenderTargetBitmap.
  • Il contenuto presente nella struttura ad albero visuale XAML ma fuori schermo non verrà acquisito. Il contenuto presente nella struttura ad albero ma con la proprietà Visibility impostata su Collapsed non verrà acquisito.
  • Il contenuto non direttamente connesso alla struttura ad albero visuale XAML e il contenuto della finestra principale non verranno acquisiti. Questo vale anche per il contenuto Popup, considerato come una finestra secondaria.
  • Il contenuto che non può essere acquisito verrà visualizzato come spazio vuoto nell'immagine acquisita, ma l'altro contenuto nella stessa struttura ad albero visuale può comunque essere acquisito e ne viene eseguito il rendering (la presenza di contenuto che non può essere acquisito non invalida l'intera acquisizione della composizione XAML).

Esempi

Questa struttura di codice di base viene adattata dal primo scenario XAML e codice del rendering XAML nell'esempio di bitmap. Notare come tutto il codice, persino il costruttore, sia incluso in un metodo async. Di seguito è riportato un gestore di eventi per un pulsante su cui un utente fa clic per avviare la richiesta di rendering.


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

Requisiti

Client supportato minimo

Windows 8.1 [Solo applicazioni Windows Store]

Server supportato minimo

Windows Server 2012 R2 [Solo applicazioni Windows Store]

Spazio dei nomi

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

Metadati

Windows.winmd

Vedere anche

ImageSource
Esempio di rendering XAML in bitmap
Guida rapida: Image e ImageBrush
RenderAsync(UIElement)

 

 

Mostra:
© 2017 Microsoft