主要功能 反锯齿矢量图形绘图
通过 XrossOne Mobile GDI+ 可以呈现所有种类的二维几何图形,例如,线段、矩形、多边形、椭圆、扇形、贝塞尔样条曲线、基数样条曲线等等。但是,扇形、贝塞尔样条曲线和基数样条曲线在 .NET Compact Framework 中不可用。此外,所有图形在呈现时都自动进行反锯齿处理。这有助于获得超级平滑质量。在 .NET Compact Framework 中,画笔的宽度被固定为 1 个像素。这一限制在 XrossOne GDI+ 中不存在。画笔的不同大小可以应用于所有图形的轮廓,如图 1 所示。
图 1. 反锯齿矢量图形绘图
代码示例 1
//Clear the background and reset the transform state gx.Clear(Color.White); gx.ResetTransform(); //Draw skew grid as the background PenX pen = new PenX(Utils.FromArgb(0x40, Color.LightGray), 5); for (int i = -Height; i < Width + Height; i+=20) { gx.DrawLine(pen, i, 0, i + Height, Height); gx.DrawLine(pen, i, 0, i - Height, Height); }
//Draw a DarkMagenta rectangle with a 10.5-pixel pen Color c = Utils.FromArgb(0x80, Color.DarkMagenta); pen = new PenX(c, 10.5f); gx.DrawRectangle(pen, 50, 20, 150, 200);
//Fill a GreenYellow rectangle c = Utils.FromArgb(0xA0, Color.GreenYellow); BrushX brush = new SolidBrushX(c); gx.FillRectangle(brush, 120, 50, 90, 150);
//Draw a BlueViolet ellipse with a 10.5-pixel pen c = Utils.FromArgb(0x80, Color.BlueViolet); pen = new PenX(c, 10.5f); gx.DrawEllipse(pen, 50, 20, 150, 80);
//Fill a Red ellipse c = Utils.FromArgb(0xA0, Color.Red); brush = new SolidBrushX(c); gx.FillEllipse(brush, 20, 50, 80, 150);
//Draw a HotPink pie from 156.5 degree to -280.9 degree pen.Color = Utils.FromArgb(0xA0, Color.HotPink); gx.DrawPie(pen, 3.6f, 120.3f, 200.8f, 130.1f, 156.5f, -280.9f);
//Draw Orange Bezier curves c = Utils.FromArgb(0xA0, Color.Orange); pen = new PenX(c, 16); Point start = new Point(70, 100); Point control1 = new Point(100, 10); Point control2 = new Point(150, 50); Point end1 = new Point(200, 200); Point control3 = new Point(100, 150); Point control4 = new Point(50, 200); Point end2 = new Point(10, 150); Point[] bezierPoints ={start, control1, control2, end1, control3, control4, end2}; pen.EndCap = LineCapX.Round; gx.DrawBeziers(pen, bezierPoints);
//Refresh Invalidate();
XrossOne GDI+ 和本机 GDI+ 的矢量图形输出是相同的,但基数样条曲线除外。我的算法取自 Jean-Yves Queinec 撰写的文章 Smoothing Algorithm Using Bezier Curves。因此,您可能发现在它们的输出之间存在一些差异,如下面的图 2 所示。
图 2. DrawCurve/DrawClosedCurve 的输出
尽管大多数矢量图形呈现函数都已经得到实现,但仍然有一些工作需要完成。某些函数(DrawString、DrawImage、DrawPath 等等)直到下一个版本才可用。
|