2012-09-28 3 views
2

Windows 8 metro 용 응용 프로그램을 만들고 있는데, 프레임 워크 컨트롤을 이미지로 렌더링하고 하드 디스크에 저장해야하지만 어떻게해야할지 모릅니다. 이것을 위해 SharpDX를 사용할 수 있습니까? 어떻게해야합니까? 도움을 미리 미리 감사드립니다.WinRT 메트로에서 이미지로 컨트롤 렌더링

+2

winrt xaml 툴킷의 확장 방법이 있습니다. http://winrtxamltoolkit.codeplex.com/SourceControl/changeset/view/512f5e79e2b6#WinRTXamlToolkit.Composition/WriteableBitmapRenderExtensions.cs – Zeeshan

답변

1

this 스레드를 따라 가면 Metro의 제한 사항과 작동하지 않는 이유가 설명됩니다.

미안하지만, 요소에 XAML 렌더링 또는 자신의 응용 프로그램의 스크린 샷을 캡처하면 릴리스 버전 안으로 들어가지는 못했습니다 : 그것의 본질이다. 디자인에 따라 은 앱이 다른 앱의 스크린 샷을 캡처 할 수 없음을 나타냅니다.

언급 한 해결 방법은 다음과 같습니다 무슨 의미가

이었다 - 당신이 Direct2D의를 사용하여 모양, 텍스트와 이미지를 그릴 수 있습니다. XAML UI로 그리는 것과 같은 모양입니다. XAML 컨트롤을 렌더링 할 수 있다는 것을 의미하는 것은 아닙니다. 그래도 다소 많은 노력을 기울여야 동일한 결과를 얻을 수있는 대안으로 Direct2D를 사용할 수 있습니다.

1

죄송합니다. WritableBitmap 클래스의 Render() 메서드는 현재 원하는 것을 성취하기에 불충분합니다. 같은 이유로 스크린 샷을 만들 수 없습니다. 그러나 이것들은 백 로그에있는 것들입니다! 그러나 이제는 알 수 있습니다.

3

justin.m.chase의 접근 방식은 확실히 경우 작동

> Install-Package WinRTXamlToolkit.Composition 

는 사용하여 추가 너는 추가해도 상관 없다. SharpDX 어셈블리에 종속성이 있습니다. RenderTargetBitmap 클래스는 수행하려는 작업에 적합 할 수 있습니다.

// Render XAML to bitmap 
var bitmap = new RenderTargetBitmap(); 
await bitmap.RenderAsync(elementToRender); 

// get the pixels 
IBuffer pixelBuffer = await bitmap.GetPixelsAsync(); 
byte[] pixels = pixelBuffer.ToArray(); 

// write the pixels to a InMemoryRandomAccessStream 
var stream = new InMemoryRandomAccessStream(); 
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream); 
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, pixels); 

await encoder.FlushAsync(); 
stream.Seek(0); 
관련 문제