Пример #1
0
        private void Init()
        {
            _compositor    = Window.Current.Compositor;
            _device        = new Direct3D11Device();
            _deviceContext = _device.ImmediateContext;
            _multithread   = _device.Multithread;
            _multithread.IsMultithreadProtected = true;
            _decoder = new ImageDecoder();
            _compositionGraphicsDevice = CompositionGraphics.CreateCompositionGraphicsDevice(_compositor, _device);

            _root = _compositor.CreateContainerVisual();
            _root.RelativeSizeAdjustment = Vector2.One;
            ElementCompositionPreview.SetElementChildVisual(this, _root);

            _imageSurface = _compositionGraphicsDevice.CreateDrawingSurface(
                new Size(1, 1),
                DirectXPixelFormat.B8G8R8A8UIntNormalized,
                DirectXAlphaMode.Premultiplied);

            _imageBrush = _compositor.CreateSurfaceBrush(_imageSurface);
            _imageBrush.HorizontalAlignmentRatio = 0;
            _imageBrush.VerticalAlignmentRatio   = 0;
            _imageBrush.Stretch = CompositionStretch.None;
            _imageBrush.BitmapInterpolationMode = CompositionBitmapInterpolationMode.NearestNeighbor;

            _imageVisual = _compositor.CreateSpriteVisual();
            _imageVisual.RelativeSizeAdjustment = Vector2.One;
            _imageVisual.Brush = _imageBrush;
            _root.Children.InsertAtTop(_imageVisual);

            _captureBrush = _compositor.CreateSurfaceBrush();

            _captureVisual = _compositor.CreateSpriteVisual();
            _captureVisual.RelativeSizeAdjustment = Vector2.One;
            _captureVisual.Brush = _captureBrush;
            _root.Children.InsertAtBottom(_captureVisual);

            _swapChain = new SwapChain(
                _device,
                DirectXPixelFormat.B8G8R8A8UIntNormalized,
                2,
                new SizeInt32()
            {
                Width = 1, Height = 1
            });
            var surface = _swapChain.CreateSurface(_compositor);

            _captureBrush.Surface = surface;
        }