public void Restore() { var flags = _flagSaves.Pop(); if ((flags & MatrixSaveFlag) == MatrixSaveFlag) { _matrix = _matrixSaves.Pop(); } if ((flags & ClipSaveFlag) == ClipSaveFlag) { var clipSave = _clipSaves.Pop(); _currentClip = clipSave.Rect; clipSave.Layer.Dispose(); } if ((flags & ClipToLayerSaveFlag) == ClipToLayerSaveFlag) { var drawingSession = _canvasDrawingSessions.Pop(); drawingSession.Flush(); drawingSession.Dispose(); var renderTargetSave = _renderTargetSaves.Pop(); var rt = renderTargetSave.CanvasRenderTarget; UpdateDrawingSessionWithFlags(renderTargetSave.PaintFlags); CurrentDrawingSession.Transform = GetCurrentTransform(); var canvasComposite = CanvasComposite.SourceAtop; if (renderTargetSave.PaintXfermode != null) { canvasComposite = PorterDuff.ToCanvasComposite(renderTargetSave.PaintXfermode.Mode); } CurrentDrawingSession.DrawImage(rt, 0, 0, rt.Bounds, renderTargetSave.PaintAlpha / 255f, CanvasImageInterpolation.Linear, canvasComposite); } CurrentDrawingSession.Flush(); }
public void Restore() { if (_flagSaves.Count < 1) { return; } var flags = _flagSaves.Pop(); //if ((flags & ClipToLayerSaveFlag) == ClipToLayerSaveFlag) //{ // using (var brush = new SolidColorBrush(CurrentRenderTarget, new RawColor4(0, 0, 0, 0.3f))) // CurrentRenderTarget.FillRectangle(new RectangleF(0, 0, 100, 100), brush); //} if ((flags & MatrixSaveFlag) == MatrixSaveFlag) { _matrix = _matrixSaves.Pop(); } if ((flags & ClipSaveFlag) == ClipSaveFlag) { var clipSave = _clipSaves.Pop(); _currentClip = clipSave.RectangleF; clipSave.Layer.Dispose(); } if ((flags & ClipToLayerSaveFlag) == ClipToLayerSaveFlag) { var drawingSession = _canvasDrawingSessions.Pop(); drawingSession.RenderTarget.Flush(); drawingSession.RenderTarget.EndDraw(); var renderTargetSave = _renderTargetSaves.Pop(); var target = renderTargetSave.RenderTarget.Target; UpdateDrawingSessionWithFlags(renderTargetSave.PaintFlags); CurrentRenderTarget.Transform = GetCurrentTransform(); var canvasComposite = CompositeMode.SourceOver; if (renderTargetSave.PaintXfermode != null) { canvasComposite = PorterDuff.ToCanvasComposite(renderTargetSave.PaintXfermode.Mode); } var rect = new RawRectangleF(0, 0, renderTargetSave.RenderTarget.Size.Width, renderTargetSave.RenderTarget.Size.Height); CurrentRenderTarget.DrawImage(drawingSession.Bitmap, new RawVector2(0, 0), new RawRectangleF(0, 0, renderTargetSave.RenderTarget.Size.Width, renderTargetSave.RenderTarget.Size.Height), //renderTargetSave.PaintAlpha / 255f, InterpolationMode.Linear, canvasComposite); //CurrentRenderTarget.DrawBitmap(drawingSession.Bitmap, 255f, InterpolationMode.Linear); //var rect = new RawRectangleF(0, 0, rt.Size.Width, rt.Size.Height); ////using (var brush = new SolidColorBrush(CurrentRenderTarget, Color.Black)) //// CurrentRenderTarget.FillOpacityMask(rt, brush, OpacityMaskContent.Graphics, rect, rect); //CurrentRenderTarget.DrawImage(rt, rect, renderTargetSave.PaintAlpha / 255f, BitmapInterpolationMode.Linear, rect); //rt.Dispose(); //renderTargetSave.RenderTarget.Dispose(); } CurrentRenderTarget.Flush(); }