RenderTargetBitmap Class

XAML 시각적 트리의 결합된 콘텐츠로 채울 수 있는 이미지 소스를 나타냅니다.RenderTargetBitmap에서 캡처할 수 있는 XAML 표시에 대한 몇 가지 중요한 제한에 대해서는 설명 부분을 참조하십시오.

상속

Object
  DependencyObject
    ImageSource
      RenderTargetBitmap

구문


public sealed class RenderTargetBitmap : ImageSource

특성

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

멤버

RenderTargetBitmap클래스에는 다음과 같은 형식의 멤버가 있습니다.

생성자

RenderTargetBitmap클래스에는 다음과 같은 생성자가 있습니다.

생성자Description
RenderTargetBitmap Initializes a new instance of the RenderTargetBitmap class.

 

메서드

The RenderTargetBitmap 클래스 - 이러한 메서드가 있습니다. 다음 위치의 메서드도 상속합니다. Object 클래스.

메서드Description
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클래스 - 이러한 속성이 있습니다.

속성사용 권한Description

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 UI 컴퍼지션에서 원래 가져온 시각적 요소에 이미지 효과 적용, 탐색 시스템에 대한 자식 페이지의 미리 보기 이미지 생성 또는 사용자가 UI의 일부를 이미지 소스로 저장한 다음 해당 이미지를 다른 앱과 공유할 수 있도록 허용 등의 시나리오를 구현할 수 있습니다.

RenderTargetBitmapImageSource의 서브 클래스이므로 Image 요소 또는 ImageBrush 브러시의 이미지 소스로 사용할 수 있습니다.

RenderAsync를 호출하면 사용 가능한 이미지 소스를 제공하지만 앱이 GetPixelsAsync를 호출할 때까지 렌더링 콘텐츠의 전체 버퍼 표현은 비디오 메모리 외부로 복사되지 않습니다. 앱이 렌더링된 콘텐츠만 표시하면 되고 픽셀 데이터를 표시할 필요가 없으면 RenderAsync만 호출하고(GetPixelsAsync 호출 안 함) RenderTargetBitmapImage 또는 ImageBrush 소스로 사용하는 것이 더 빠릅니다. 공유 계약 교환 등의 DataTransferManager 작업에 대한 이미지를 캡처하려는 경우 또는 이미지에 효과를 적용하거나 Windows.Graphics.Imaging API를 사용하여 트랜스코딩하려는 경우 픽셀 데이터가 필요할 수 있습니다.

가장 자주 사용할 RenderTargetBitmap API는 RenderAsync입니다. 이 메서드의 두 오버로드(RenderAsync(UIElement)another overload)가 있으며, 여기서 원하는 이미지 소스 크기를 소스 시각적 트리의 일반 크기와 다르게 지정할 수 있습니다. RenderAsync는 기본적으로 비동기 메서드이므로, UI 소스와의 정확한 프레임 동기화를 보장하지 않지만, 대부분의 시나리오에서 충분히 일치하는 타이밍을 제공합니다.

코드에서 RenderAsync를 호출해야만 UI 표시를 위한 RenderTargetBitmap의 이미지로 채워진 유용한 인스턴스를 가질 수 있으므로 RenderTargetBitmap 개체는 일반적으로 XAML UI에 선언되지 않습니다.

RenderTargetBitmap 사용에 대한 추가 코드 예제는 비트맵으로 XAML 렌더링 샘플을 참조하십시오.

드물지만 다른 하위 시스템과의 상호 작용(예: 복구 작업 중 비디오 드라이버가 다시 설정되는 경우) 때문에 RenderTargetBitmap의 콘텐츠가 손실될 수도 있습니다(TDR(제한 시간 탐지 및 복구) 참조). 이 경우 CompositionTarget.SurfaceContentsLost 이벤트가 발생합니다. 이러한 경우 및 정보가 손실되는 비슷한 경우를 고려하려면 앱이 CompositionTarget.SurfaceContentsLost 이벤트를 수신 대기하고 RenderAsync를 다시 호출하여 RenderTargetBitmap의 콘텐츠를 다시 렌더링해야 합니다.

RenderTargetBitmap의 렌더링된 비트맵 콘텐츠는 현재 DPI 설정이 변경되는 경우에도 자동으로 크기가 조정되지 않습니다. 렌더링된 벡터 콘텐츠를 선명하게 유지하기 위해 현재 뷰의 DPI 설정이 변경될 경우 앱은 RenderTargetBitmap의 콘텐츠를 다시 렌더링해야 합니다. 예를 들어 사용자가 서로 다른 DPI 설정의 두 모니터 간 앱을 이동할 경우 크기 변경이 발생할 수 있습니다. 이러한 경우를 검색하려면 DisplayInformation.DpiChanged 이벤트를 수신 대기하는 것이 좋습니다.

XAML 시각적 트리의 최대 렌더링 크기는 Microsoft DirectX 질감의 최대 크기로 제한됩니다. 자세한 내용은 Resource Limits(Direct3D)를 참조하십시오. 이 제한은 앱이 실행되는 하드웨어에 따라 달라질 수 있습니다. 대용량 콘텐츠의 크기가 이 제한을 초과할 경우 조정하여 맞출 수 있습니다. 크기 조정 제한이 이런 식으로 적용되는 경우 크기 조정 후 렌더링된 크기는 PixelWidthPixelHeight 속성을 사용하여 쿼리될 수 있습니다. 예를 들어 앱이 실행되는 하드웨어에 의해 강제 적용되는 특정 제한의 예로 10000 x 10000 픽셀 XAML 시각적 트리가 4096 x 4096 픽셀로 조정될 수 있습니다.

XAML 화면 효과 및 RenderTargetBitmap 캡처 기능

RenderTargetBitmap으로 캡처할 수 없는 XAML로 작성된 시각적 콘텐츠에 대한 몇 가지 시나리오는 다음과 같습니다.

  • RenderTargetBitmap을 사용하여 MediaElement 또는 CaptureElement의 비디오 콘텐츠를 캡처할 수 없습니다. 여기에는 비디오 콘텐츠 내에서의 프레임 캡처가 포함됩니다.
  • SwapChainBackgroundPanel 또는 SwapChainPanel 내부의 사용자 지정 DirectX 콘텐츠(사용자의 스왑 체인)는 RenderTargetBitmap을 사용하여 캡처할 수 없습니다.
  • XAML 시각적 트리에 있지만 화면을 벗어난 콘텐츠는 캡처되지 않습니다. 트리에 있지만 VisibilityCollapsed로 설정된 콘텐츠는 캡처되지 않습니다.
  • 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 스토어 앱만]

Namespace

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

Metadata

Windows.winmd

참고 항목

ImageSource
XAML은 비트맵 샘플로 렌더링됩니다.
빠른 시작: Image와 ImageBrush
RenderAsync(UIElement)

 

 

표시:
© 2014 Microsoft