RenderTargetBitmap Class

Представляет источник изображения, который можно заполнить объединенным содержимым визуального дерева XAML. В примечаниях перечислены некоторые существенные ограничения захвата визуальных элементов XAML в класс RenderTargetBitmap.

Наследование

Object
  DependencyObject
    ImageSource
      RenderTargetBitmap

Синтаксис


public sealed class RenderTargetBitmap : ImageSource

Атрибуты

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

Члены

RenderTargetBitmapКласс имеет следующие типы членов:

Конструкторы

RenderTargetBitmapКласс имеет эти конструкторы.

КонструкторОписание
RenderTargetBitmap Initializes a new instance of the RenderTargetBitmap class.

 

Методы

The RenderTargetBitmap Класс имеет следующие методы. Также наследует методы из Object Класс.

МетодОписание
ClearValue Clears the local value of a dependency property. (Унаследовано от DependencyObject)
GetAnimationBaseValue Returns any base value established for a dependency property, which would apply in cases where an animation is not active. (Унаследовано от 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. (Унаследовано от DependencyObject)
ReadLocalValue Returns the local value of a dependency property, if a local value is set. (Унаследовано от 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. (Унаследовано от DependencyObject)

 

Свойства

RenderTargetBitmapКласс имеет следующие свойства.

СвойствоТип доступаОписание

Dispatcher

Только для чтенияGets the CoreDispatcher that this object is associated with. (Унаследовано от DependencyObject)

PixelHeight

Только для чтенияGets the height of the rendered bitmap in pixels.

PixelHeightProperty

Только для чтенияIdentifies the PixelHeight dependency property.

PixelWidth

Только для чтенияGets the width of the rendered bitmap in pixels.

PixelWidthProperty

Только для чтенияIdentifies the PixelWidth dependency property.

 

Примечания

Используя класс RenderTargetBitmap, можно выполнять такие сценарии, как применение эффектов изображения к визуальному элементу, который изначально происходит из композиции пользовательского интерфейса XAML, создание эскизов дочерних страниц для системы переходов или обеспечение пользователю возможности сохранять части пользовательского интерфейса в качестве источников изображения с последующим использованием этого изображения совместно с другими приложениями.

Поскольку RenderTargetBitmap является подклассом ImageSource, его можно в качестве источника изображения для элементов класса Image или кисти ImageBrush.

Вызов метода RenderAsync предоставляет источник полезного изображение, но полное представление отрисовываемого содержимого не копируется из видеопамяти, пока приложение не вызовет GetPixelsAsync. Быстрее вызвать только RenderAsync (без вызова метода GetPixelsAsync) и использовать в качестве источника RenderTargetBitmapImage или ImageBrush, если приложение предназначено только для отображения отрисованного содержимого и ему не требуются пиксельные данные. Пиксельные данные могут потребоваться, если планируется захват изображения для операции DataTransferManager, например для обмена контракта общего доступа, либо если требуется применить эффекты к изображению или перекодировать его с помощью API Windows.Graphics.Imaging.

Наиболее часто используемый API RenderTargetBitmapRenderAsync. Существует две перегрузки этого метода: RenderAsync(UIElement) и another overload, где можно указать желаемые измерения источника изображений, которые должны отличаться от естественного размера визуального дерева источника. RenderAsync является по замыслу асинхронным методом, поэтому отсутствуют гарантии точной синхронизации кадров в источнике ИП, однако с точки зрения времени для большинства сценариев это близко.

Объект RenderTargetBitmap обычно не объявляется в пользовательском интерфейсе XAML, поскольку в коде необходимо вызвать метод RenderAsync, чтобы получить подходящий, заполненный изображением экземпляр объекта RenderTargetBitmap для отображения пользовательского интерфейса.

Дополнительные примеры кода с использованием RenderTargetBitmap см. в разделе Пример отрисовки растрового изображения в XAML.

Содержимое RenderTargetBitmap можно потерять в редких случаях из-за взаимодействия с другими системами нижнего уровня, например если видеодрайвер сброшен в процессе восстановления (см. Обнаружение и ожидания восстановления (TDR)). Если это произошло, будет создано событие CompositionTarget.SurfaceContentsLost. Для учета этого случая и аналогичных ситуаций, связанных с потерей информации, приложения должны прослушивать событие CompositionTarget.SurfaceContentsLost и заново отрисовывать содержимое объекта RenderTargetBitmap путем вызова метода RenderAsync.

Обработанное растровое содержимое RenderTargetBitmap автоматически не масштабируется при изменении текущей настройки точек на дюйм. Если параметр числа точек на дюйм текущего представления изменяется, то для обеспечения сохранения четкого отображения содержимого вектора приложения должны заново отобразить содержимое RenderTargetBitmap. Например, изменение размера может произойти, когда пользователь перемещает приложение между двумя мониторами с различными значениями количества точек на дюйм. Рассмотрим прослушивает события DisplayInformation.DpiChanged, чтобы обнаружить такие случаи.

Максимальный отображаемый размер визуального дерева XAML ограничивается максимальными измерениями текстуры Microsoft DirectX; дополнительные сведения см. в разделе Ограничения ресурсов (Direct3D). Это ограничение может различаться в зависимости от оборудования, на котором запущено приложение. Очень большое содержимое, которое превышает это ограничение, может быть масштабировано для размещения. Если ограничения масштабирования применены таким образом, визуализируемый размер после масштабирования можно запросить с помощью свойств PixelWidth и PixelHeight. Например, видимое дерево XAML 10000 на 10000 пикселей может быть масштабировано до 4096 на 4096 пикселей; это пример конкретного ограничения, устанавливаемого оборудованием, на котором запущено приложение.

Возможности захвата визуальных элементов XAML и RenderTargetBitmap

Существует несколько сценариев для созданного на XAML визуального содержимого, которое невозможно захватить для RenderTargetBitmap:

  • Видеосодержимое в объекте MediaElement или CaptureElement нельзя захватить с помощью RenderTargetBitmap. Это включает формирование кадров из содержимого видеозаписи.
  • Пользовательское содержимое DirectX (собственная цепочка буферов) внутри SwapChainBackgroundPanel или SwapChainPanel не может быть захвачено с помощью RenderTargetBitmap.
  • Содержимое, находящееся в видимом дереве XAML, но за пределами экрана, не захватывается. Содержимое, находящееся в дереве, но для которого Visibility имеет значение Collapsed, не захватывается.
  • Содержимое, непосредственно не связанное с видимым деревом XAML и с содержимым главного окна, не захватывается. Сюда входит содержимое Popup, которое считается аналогичным вложенному окну.
  • Содержимое, которое не удается захватить, отображается как пустое место в захваченном изображении, но другое содержимое в том же видимом дереве по-прежнему может быть захвачено и отрисовано (наличие содержимого, которое невозможно захватить, не отменяет захват всей композиции XAML).

Примеры

Эта базовая структура кода адаптирована из кода XAML первого сценария и кода отрисовки XAML в растровом примере. Обратите внимание, что весь код, даже конструктор, размещен в методе async. Здесь это обработчик событий для кнопки, который пользователь нажимает, чтобы инициировать запрос на отрисовку.


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

Требования

Минимальный поддерживаемый клиент

Windows 8.1 [Только приложения для Магазина Windows]

Минимальный поддерживаемый сервер

Windows Server 2012 R2 [Только приложения для Магазина Windows]

Пространство имен

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

Metadata

Windows.winmd

См. также

ImageSource
Пример отрисовки растрового изображения в XAML
Краткое руководство. Image и ImageBrush
RenderAsync(UIElement)

 

 

Показ:
© 2014 Microsoft