/// <summary> 清除整个绘图面并以指定背景色填充 /// </summary> /// <param name="color">System.Drawing.Color 结构,它表示绘图面的背景色</param> public void Clear(Color color) { //this.DxRenderInfos.Clear(); if (color == Color.Transparent) { this.target.RenderTarget.Clear(DxConvert.ToColor4(color)); if (this.target is DUIWindowRenderTarget dUIWindowRenderTarget) { Control control = Control.FromHandle(dUIWindowRenderTarget.Handle); if (control != null) { using (Graphics ownerGraphics = Graphics.FromHwnd(dUIWindowRenderTarget.Handle)) using (DUIImage image = new DUIImage(control.ClientSize.Width, control.ClientSize.Height)) using (Graphics targetGraphics = Graphics.FromImage(image)) { IntPtr ownerDC = ownerGraphics.GetHdc(); IntPtr targetDC = targetGraphics.GetHdc(); DirectUI.Win32.NativeMethods.BitBlt(targetDC, 0, 0, control.ClientSize.Width, control.ClientSize.Height, ownerDC, 0, 0, 13369376); ownerGraphics.ReleaseHdc(ownerDC); targetGraphics.ReleaseHdc(targetDC); image.RenderTarget = this.target; this.target.RenderTarget.DrawBitmap(image, DxConvert.ToRectF(0, 0, control.ClientSize.Width, control.ClientSize.Height), 1, SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor, DxConvert.ToRectF(0, 0, image.Width, image.Height)); } } } } else { this.target.RenderTarget.Clear(DxConvert.ToColor4(color)); } }
public void FillPolygon(DUIBrush brush, PointF[] points) { bool closed = true; if (points == null) { return; } if (points.Length < 3) { return; } brush.RenderTarget = this.target; using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory)) using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open()) { geometrySink.SetFillMode(SharpDX.Direct2D1.FillMode.Alternate); geometrySink.BeginFigure(DxConvert.ToVector2(points[0]), SharpDX.Direct2D1.FigureBegin.Filled); for (int i = 1; i < points.Length; i++) { geometrySink.AddLine(DxConvert.ToVector2(points[i])); } geometrySink.EndFigure(closed ? SharpDX.Direct2D1.FigureEnd.Closed : SharpDX.Direct2D1.FigureEnd.Open); geometrySink.Close(); this.target.RenderTarget.FillGeometry(pathGeometry, brush); } }
public void DrawBezier(DUIPen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) { pen.RenderTarget = this.target; if (pen.IsDefaultStyleProperties) { using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory)) using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open()) { geometrySink.BeginFigure(DxConvert.ToVector2(x1, y1), SharpDX.Direct2D1.FigureBegin.Hollow); geometrySink.AddBezier(new SharpDX.Direct2D1.BezierSegment() { Point1 = DxConvert.ToVector2(x2, y2), Point2 = DxConvert.ToVector2(x3, y3), Point3 = DxConvert.ToVector2(x4, y4) }); geometrySink.EndFigure(SharpDX.Direct2D1.FigureEnd.Open); geometrySink.Close(); this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width); } } else { using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory)) using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open()) { geometrySink.BeginFigure(DxConvert.ToVector2(x1, y1), SharpDX.Direct2D1.FigureBegin.Hollow); geometrySink.AddBezier(new SharpDX.Direct2D1.BezierSegment() { Point1 = DxConvert.ToVector2(x2, y2), Point2 = DxConvert.ToVector2(x3, y3), Point3 = DxConvert.ToVector2(x4, y4) }); geometrySink.EndFigure(SharpDX.Direct2D1.FigureEnd.Open); geometrySink.Close(); this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width, pen); } } }
public SizeF MeasureString(string text, DUIFont font, float width, float height) { using (SharpDX.DirectWrite.TextLayout tl = DxConvert.ToTextLayout(font, text)) { float w = tl.Metrics.WidthIncludingTrailingWhitespace; float h = tl.Metrics.Height; return(new SizeF(w, h)); } }
public static SharpDX.Direct2D1.BitmapBrush ToBitmapBrush(DUIRenderTarget renderTarget, SharpDX.Direct2D1.Bitmap dxBitmap) { SharpDX.Direct2D1.BitmapBrush bb = new SharpDX.Direct2D1.BitmapBrush(renderTarget, dxBitmap); var extendMode = DxConvert.ToExtendMode(DUIExtendMode.Clamp); bb.ExtendModeX = extendMode; bb.ExtendModeY = extendMode; bb.InterpolationMode = SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor; return(bb); }
/// <summary> 加入一个图层 /// </summary> /// <param name="width">图层宽度</param> /// <param name="height">图层深度</param> public void PushLayer(float x, float y, float width, float height) { this.target.RenderTarget.PushAxisAlignedClip(DxConvert.ToRectF(new RectangleF(x, y, width, height)), SharpDX.Direct2D1.AntialiasMode.PerPrimitive); //using (SharpDX.Direct2D1.Layer layer = new SharpDX.Direct2D1.Layer(this.target.RenderTarget)) //{ // layerParameters.ContentBounds = DxConvert.ToRectF(new RectangleF(x, y, width, height)); // this.target.RenderTarget.PushLayer(ref layerParameters, layer); //} isPushLayer.Push(true); }
public void DrawRoundedRectangle(DUIPen pen, float x, float y, float width, float height, float radius) { pen.RenderTarget = this.target; if (pen.IsDefaultStyleProperties) { this.target.RenderTarget.DrawRoundedRectangle(DxConvert.ToRoundRectF(x, y, width, height, radius), pen, pen.Width); } else { this.target.RenderTarget.DrawRoundedRectangle(DxConvert.ToRoundRectF(x, y, width, height, radius), pen, pen.Width, pen); } }
public void DrawEllipse(DUIPen pen, float x, float y, float width, float height) { pen.RenderTarget = this.target; if (pen.IsDefaultStyleProperties) { this.target.RenderTarget.DrawEllipse(DxConvert.ToEllipse(new RectangleF(x, y, width, height)), pen, pen.Width); } else { this.target.RenderTarget.DrawEllipse(DxConvert.ToEllipse(new RectangleF(x, y, width, height)), pen, pen.Width, pen); } }
//public static SharpDX.Direct2D1.BitmapBrush ToBitmapBrush(DUIRenderTarget renderTarget, Bitmap bitmap) //{ // return new SharpDX.Direct2D1.BitmapBrush(renderTarget, ToBitmap(renderTarget, bitmap)); //} public static SharpDX.Direct2D1.BitmapBrush ToBitmapBrush(DUIRenderTarget renderTarget, DUIBitmapBrush bitmapBrush) { bitmapBrush.Image.RenderTarget = renderTarget; SharpDX.Direct2D1.BitmapBrush bb = new SharpDX.Direct2D1.BitmapBrush(renderTarget, bitmapBrush.Image); var extendMode = DxConvert.ToExtendMode(bitmapBrush.ExtendMode); bb.ExtendModeX = extendMode; bb.ExtendModeY = extendMode; bb.InterpolationMode = SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor; bb.Opacity = bitmapBrush.Opacity; return(bb); }
public void DrawString(string s, DUIFont font, DUIBrush brush, RectangleF layoutRectangle, StringFormat format) { brush.RenderTarget = this.target; try { this.target.RenderTarget.DrawText(s, font, DxConvert.ToRectF(new RectangleF(layoutRectangle.X, layoutRectangle.Y, float.MaxValue, 0)), brush); } catch (Exception ex) { Log.DUILog.GettingLog(ex); //这里报错率很高,但不知道为什么 } }
public void DrawPolygon(DUIPen pen, PointF[] points) { bool closed = true; if (points == null) { return; } if (points.Length < (closed ? 3 : 2)) { return; } pen.RenderTarget = this.target; if (pen.IsDefaultStyleProperties) { using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory)) using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open()) { geometrySink.BeginFigure(DxConvert.ToVector2(points[0]), SharpDX.Direct2D1.FigureBegin.Filled); for (int i = 1; i < points.Length; i++) { geometrySink.AddLine(DxConvert.ToVector2(points[i])); } geometrySink.EndFigure(closed ? SharpDX.Direct2D1.FigureEnd.Closed : SharpDX.Direct2D1.FigureEnd.Open); geometrySink.Close(); this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width); } } else { using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory)) using (SharpDX.Direct2D1.GeometrySink geometrySink = pathGeometry.Open()) { geometrySink.BeginFigure(DxConvert.ToVector2(points[0]), SharpDX.Direct2D1.FigureBegin.Filled); for (int i = 1; i < points.Length; i++) { geometrySink.AddLine(DxConvert.ToVector2(points[i])); } geometrySink.EndFigure(closed ? SharpDX.Direct2D1.FigureEnd.Closed : SharpDX.Direct2D1.FigureEnd.Open); geometrySink.Close(); this.target.RenderTarget.DrawGeometry(pathGeometry, pen, pen.Width, pen); } } }
public void DrawImage(DUIImage image, PointF[] polygon, GraphicsUnit srcUnit, float opacity) { image.RenderTarget = this.target; using (DirectUI.Common.DUIBitmapBrush dbs = new DirectUI.Common.DUIBitmapBrush(image, DUIExtendMode.Clamp, opacity)) using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory)) using (SharpDX.Direct2D1.GeometrySink gs1 = pathGeometry.Open()) { dbs.RenderTarget = this.target; gs1.SetFillMode(SharpDX.Direct2D1.FillMode.Alternate); gs1.BeginFigure(DxConvert.ToVector2(polygon[0]), SharpDX.Direct2D1.FigureBegin.Filled); for (int i = 1; i < polygon.Length; i++) { gs1.AddLine(DxConvert.ToVector2(polygon[i])); } gs1.EndFigure(SharpDX.Direct2D1.FigureEnd.Closed); gs1.Close(); this.target.RenderTarget.FillGeometry(pathGeometry, dbs); } }
public void DrawImage(DUIImage image, PointF[] destTriangle, PointF[] srcTriangle, GraphicsUnit srcUnit, float opacity) { PointF t1 = destTriangle[0]; PointF t2 = destTriangle[1]; PointF t3 = destTriangle[2]; image.RenderTarget = this.target; using (DirectUI.Common.DUIBitmapBrush dbs = new DirectUI.Common.DUIBitmapBrush(image, DUIExtendMode.Clamp, opacity)) using (SharpDX.Direct2D1.PathGeometry pathGeometry = new SharpDX.Direct2D1.PathGeometry(this.target.RenderTarget.Factory)) using (SharpDX.Direct2D1.GeometrySink gs1 = pathGeometry.Open()) { dbs.RenderTarget = this.target; gs1.SetFillMode(SharpDX.Direct2D1.FillMode.Alternate); gs1.BeginFigure(DxConvert.ToVector2(t1), SharpDX.Direct2D1.FigureBegin.Filled); gs1.AddLine(DxConvert.ToVector2(t2)); gs1.AddLine(DxConvert.ToVector2(t3)); gs1.EndFigure(SharpDX.Direct2D1.FigureEnd.Closed); gs1.Close(); dbs.Transform = MatrixTools.ThreePointsAffine(srcTriangle, destTriangle); this.target.RenderTarget.FillGeometry(pathGeometry, dbs); } }
public void FillEllipse(DUIBrush brush, float x, float y, float width, float height) { brush.RenderTarget = this.target; this.target.RenderTarget.FillEllipse(DxConvert.ToEllipse(new RectangleF(x, y, width, height)), brush); }
public void DrawImage(DUIImage image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, float opacity) { image.RenderTarget = this.target; this.target.RenderTarget.DrawBitmap(image, DxConvert.ToRectF(destRect), opacity, SharpDX.Direct2D1.BitmapInterpolationMode.NearestNeighbor, DxConvert.ToRectF(srcRect)); }
/// <summary> 基于指定的 System.Drawing.RectangleF 结构初始化一个新的 DUIRegion。 /// </summary> /// <param name="rect">一个 System.Drawing.RectangleF 结构,用于定义新 DUIRegion 的内部</param> public DUIRegion(RectangleF rect) { this.region = new Region(rect); this.actions.Add((dxGeometry, geometrySink) => { SharpDX.Direct2D1.RectangleGeometry rectangleGeometry = new SharpDX.Direct2D1.RectangleGeometry(RenderTarget.RenderTarget.Factory, DxConvert.ToRectF(rect)); this.rectangleGeometry.Combine(rectangleGeometry, SharpDX.Direct2D1.CombineMode.Union, geometrySink); }); }
/// <summary> 将此 DUIRegion 更新为其自身与指定的 System.Drawing.Rectangle 结构的交集。 /// </summary> /// <param name="rect">要与此 DUIRegion 相交的 System.Drawing.Rectangle 结构。</param> public void Intersect(Rectangle rect) { this.region.Intersect(rect); this.actions.Add((dxGeometry, geometrySink) => { SharpDX.Direct2D1.RectangleGeometry rectangleGeometry = new SharpDX.Direct2D1.RectangleGeometry(RenderTarget.RenderTarget.Factory, DxConvert.ToRectF(rect)); this.rectangleGeometry.Combine(rectangleGeometry, SharpDX.Direct2D1.CombineMode.Intersect, geometrySink); }); }
public DirectUI.Common.DUIGraphicsState Save() { return(DxConvert.ToDUIGraphicsState(this.graphics.Save())); }
public void FillRoundedRectangle(DUIBrush brush, float x, float y, float width, float height, float radius) { brush.RenderTarget = this.target; this.target.RenderTarget.FillRoundedRectangle(DxConvert.ToRoundRectF(x, y, width, height, radius), brush); }