RenderTargetBitmap Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет источник изображения, который можно заполнить объединенным содержимым визуального дерева XAML. Ознакомьтесь с некоторыми заметными ограничениями, которые могут захватывать визуальные элементы XAML в 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
- Наследование
- Атрибуты
Требования к Windows
Семейство устройств |
Windows 10 (появилось в 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (появилось в v1.0)
|
Примеры
Эта базовая структура кода адаптирована из первого сценария XAML и кода отрисовки XAML в примере растрового изображения. Обратите внимание, что весь код, даже конструктор, находится в асинхронном методе. Здесь это обработчик событий для кнопки, которую пользователь нажимает, чтобы инициировать запрос отрисовки.
<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;
}
Комментарии
С помощью RenderTargetBitmap можно выполнять такие сценарии, как применение эффектов изображений к визуальному элементу, изначально полученному из композиции пользовательского интерфейса XAML, создание эскизов дочерних страниц для системы навигации или предоставление пользователю возможности сохранять части пользовательского интерфейса в качестве источника изображений, а затем делиться этим изображением с другими приложениями.
Так как RenderTargetBitmap является подклассом ImageSource, его можно использовать в качестве источника изображения для элементов Image или кисти ImageBrush .
Вызов RenderAsync предоставляет полезный источник изображения, но полное представление буфера отрисовки содержимого не копируется из видеопамять до тех пор, пока приложение не вызовет GetPixelsAsync. Быстрее вызвать только RenderAsync (без вызова GetPixelsAsync) и использовать RenderTargetBitmap в качестве источника Image или ImageBrush , если приложение предназначено только для отображения отображаемого содержимого и не нуждается в пиксельных данных. Возможно, вам понадобятся пиксельные данные, если вы планируете записать изображение для операции DataTransferManager , такой как обмен контрактами общего доступа, или если вы хотите применить эффекты к изображению или перекодировать его с помощью API Windows.Graphics.Imaging.
Api RenderTargetBitmap, который вы будете использовать чаще всего, — RenderAsync. Существует две перегрузки этого метода: RenderAsync(UIElement) и другая перегрузка , в которой можно указать требуемые размеры источника изображения, которые будут отличаться от естественного размера исходного визуального дерева. RenderAsync — это асинхронный метод, поэтому точной синхронизации кадров с источником пользовательского интерфейса нет, но для большинства сценариев это достаточно близко.
Объект RenderTargetBitmap обычно не объявляется в пользовательском интерфейсе XAML, так как необходимо вызвать RenderAsync в коде, прежде чем вы получите полезный, заполненный изображением экземпляр RenderTargetBitmap для отображения пользовательского интерфейса.
Дополнительные примеры кода использования RenderTargetBitmap см. в разделе Пример отрисовки XAML в растровом рисунке.
Содержимое RenderTargetBitmap может быть потеряно в редких случаях из-за взаимодействия с другими системами более низкого уровня, например, если видеодрайв сбрасывается в процессе восстановления (см. раздел Обнаружение и восстановление времени ожидания (TDR)). В этом случае срабатывает событие CompositionTarget.SurfaceContentsLost . Чтобы учесть этот случай и аналогичные случаи потери информации, приложения должны прослушивать событие CompositionTarget.SurfaceContentsLost и повторно отображать содержимое RenderTargetBitmap путем повторного вызова RenderAsync .
Отрисованное растровое содержимое RenderTargetBitmap не масштабируется автоматически при изменении текущего параметра DPI. Приложения должны повторно отображать содержимое RenderTargetBitmap при изменении параметра DPI текущего представления, чтобы обеспечить четкость отображаемого векторного содержимого. Например, изменение размера может произойти, если пользователь перемещает приложение между двумя мониторами, работающими с другим параметром DPI. Для обнаружения таких случаев рассмотрите возможность прослушивания события DisplayInformation.DpiChanged .
Максимальный размер отображаемого визуального дерева XAML ограничивается максимальными размерами текстуры Microsoft DirectX; Дополнительные сведения см. в разделе Ограничения ресурсов (Direct3D 11). Это ограничение может отличаться в зависимости от оборудования, на котором выполняется приложение. Очень большое содержимое, превышающее это ограничение, может быть масштабировано по размеру. Если ограничения масштабирования применяются таким образом, отображаемый размер после масштабирования можно запросить с помощью свойств PixelWidth и PixelHeight . Например, визуальное дерево XAML 10000 на 10000 пикселей может быть масштабировано до 4096 на 4096 пикселей, что является примером определенного ограничения, принудительного оборудованием, на котором выполняется приложение.
Визуальные элементы XAML и возможности захвата RenderTargetBitmap
Существует несколько сценариев для визуального содержимого, состоящего из XAML, которое невозможно записать в RenderTargetBitmap:
- Содержимое, которое находится в дереве, но для параметра Видимость установлено значение Свернуто , не будет захватываться.
- Содержимое, которое не подключено непосредственно к визуальному дереву XAML, и содержимое окна main не будет захватываться. Сюда входит содержимое всплывающего окна , которое считается как вложенное окно.
- Содержимое, которое не может быть записано, будет отображаться как пустое на изображении, но другое содержимое в том же визуальном дереве по-прежнему может быть записано и отрисовывается (наличие содержимого, которое не может быть записано, не сделает недействительным весь захват этой композиции XAML).
- Содержимое, которое находится в визуальном дереве XAML, но за его экраном можно захватывать, если оно не = свернуто.
Конструкторы
RenderTargetBitmap() |
Инициализирует новый экземпляр класса RenderTargetBitmap . |
Свойства
Dispatcher |
Возвращает объект CoreDispatcher , с которым связан этот объект. CoreDispatcher представляет собой средство, которое может получить доступ к DependencyObject в потоке пользовательского интерфейса, даже если код инициируется потоком, не относящегося к пользовательскому интерфейсу. (Унаследовано от DependencyObject) |
PixelHeight |
Возвращает высоту отображаемого растрового изображения в пикселях. |
PixelHeightProperty |
Определяет свойство зависимостей PixelHeight . |
PixelWidth |
Возвращает ширину отображаемого растрового изображения в пикселях. |
PixelWidthProperty |
Определяет свойство зависимостей PixelWidth . |
Методы
ClearValue(DependencyProperty) |
Очищает локальное значение свойства зависимостей. (Унаследовано от DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Возвращает любое базовое значение, установленное для свойства зависимостей, которое применяется в случаях, когда анимация не активна. (Унаследовано от DependencyObject) |
GetPixelsAsync() |
Извлекает ранее отрисованное изображение RenderTargetBitmap в виде буферизованного потока байтов в предварительном альфа-форматеBGRA8. |
GetValue(DependencyProperty) |
Возвращает текущее действующее значение свойства зависимостей из DependencyObject. (Унаследовано от DependencyObject) |
ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если задано локальное значение. (Унаследовано от DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Регистрирует функцию уведомления для прослушивания изменений определенного DependencyProperty в этом экземпляре DependencyObject . (Унаследовано от DependencyObject) |
RenderAsync(UIElement) |
Отрисовывает snapshot визуального дерева UIElement в источник изображения. |
RenderAsync(UIElement, Int32, Int32) |
Отрисовывает snapshot визуального дерева UIElement в источник изображения. Укажите значения scaledWidth и scaledHeight , чтобы изменить измерение отрисовки исходного источника. |
SetValue(DependencyProperty, Object) |
Задает локальное значение свойства зависимостей для Объекта DependencyObject. (Унаследовано от DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Отменяет уведомление об изменениях, которое было ранее зарегистрировано путем вызова Метода RegisterPropertyChangedCallback. (Унаследовано от DependencyObject) |