public void DrawRect(double x1, double y1, double x2, double y2, Paint paint) { UpdateDrawingSessionWithFlags(paint.Flags); CurrentRenderTarget.Transform = GetCurrentTransform(); using (var brush = new SolidColorBrush(CurrentRenderTarget, paint.Color)) { if (paint.Style == Paint.PaintStyle.Stroke) { CurrentRenderTarget.DrawRectangle(new RectangleF((float)x1, (float)y1, (float)(x2 - x1), (float)(y2 - y1)), brush, paint.StrokeWidth, GetStrokeStyle(paint)); } else { CurrentRenderTarget.FillRectangle(new RectangleF((float)x1, (float)y1, (float)(x2 - x1), (float)(y2 - y1)), brush); } } if (paint.Xfermode.Mode == PorterDuff.Mode.Clear) { CurrentRenderTarget.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(); }