NGraphics完全指南:跨平台.NET矢量图形渲染库入门详解
【免费下载链接】NGraphicsNGraphics is a cross platform library for rendering vector graphics on .NET. It provides a unified API for both immediate and retained mode graphics using high quality native renderers.项目地址: https://gitcode.com/gh_mirrors/ng/NGraphics
NGraphics是一个强大的跨平台.NET矢量图形渲染库,为开发者提供了统一的API来渲染高质量的矢量图形。无论您是在构建UI组件、创建交互式视图,还是需要导入导出SVG和PNG文件,NGraphics都能满足您的需求。这个库支持即时模式和保留模式两种渲染方式,并利用原生渲染器实现高质量的图形输出。
🚀 NGraphics核心功能概览
NGraphics的核心功能包括:
- 跨平台支持:支持Android、iOS、macOS、Windows和.NET Core
- 矢量图形渲染:绘制矩形、椭圆、路径等基本图形
- SVG导入导出:完整的SVG文件读写支持
- 高质量渲染:利用原生图形API实现最佳性能
- 统一的API:一套代码在所有平台上运行
📦 快速安装与配置
要开始使用NGraphics,您可以通过NuGet包管理器轻松安装:
dotnet add package NGraphics或者直接在Visual Studio的NuGet包管理器中搜索"NGraphics"并安装最新版本。
🎨 基础绘图示例
让我们从一个简单的例子开始,绘制一个房子:
var canvas = Platforms.Current.CreateImageCanvas(new Size(100), scale: 2); var skyBrush = new LinearGradientBrush(Point.Zero, Point.OneY, Colors.Blue, Colors.White); canvas.FillRectangle(new Rect(canvas.Size), skyBrush); canvas.FillEllipse(10, 10, 30, 30, Colors.Yellow); canvas.FillRectangle(50, 60, 60, 40, Colors.LightGray); canvas.FillPath(new PathOp[] { new MoveTo(40, 60), new LineTo(120, 60), new LineTo(80, 30), new ClosePath() }, Colors.Gray); canvas.GetImage().SaveAsPng("house.png");🖌️ 画笔与填充工具
NGraphics提供了丰富的绘图工具,包括各种画笔和填充选项:
画笔设置示例
var canvas = Platforms.Current.CreateImageCanvas(new Size(120*5, 120), scale: 2); canvas.Translate(20, 20); for (var i = 0; i < 5; i++) { canvas.DrawEllipse( new Rect(new Size(80)), pen: Pens.DarkGray.WithWidth(1 << i), brush: Brushes.LightGray); canvas.Translate(120, 0); } canvas.GetImage().SaveAsPng("PenWidths.png");渐变填充效果
NGraphics支持线性渐变和径向渐变填充,让您的图形更加生动:
// 线性渐变示例 var linearGradient = new LinearGradientBrush( new Point(0, 0), new Point(1, 1), Colors.Red, Colors.Blue); // 径向渐变示例 var radialGradient = new RadialGradientBrush( new Point(0.5, 0.5), 0.5, Colors.Yellow, Colors.Orange);🌈 颜色系统
NGraphics提供了灵活的颜色系统:
// RGBA构造函数 var color1 = new Color(1.0, 0.0, 0.0, 1.0); // 红色 // Web十六进制表示法 var color2 = Color.FromRGB(0xFF5733); // 橙色 // 预定义颜色 var red = Colors.Red; var blue = Colors.Blue; var green = Colors.Green;📐 基本图形元素
NGraphics支持多种基本图形元素:
矩形绘制
var rectangle = new Rectangle(new Rect(10, 10, 100, 50)); rectangle.Draw(canvas);椭圆和圆形
var ellipse = new Ellipse(new Rect(50, 50, 80, 40)); var circle = new Ellipse(new Rect(100, 100, 50, 50));路径绘制
路径是NGraphics中最强大的绘图工具:
var path = new Path(); path.MoveTo(0, 0); path.LineTo(100, 50); path.QuadraticCurveTo(150, 0, 200, 50); path.Close();🔄 SVG文件处理
NGraphics提供了完整的SVG文件读写支持:
读取SVG文件
using (var stream = File.OpenRead("input.svg")) { var reader = new SvgReader(new StreamReader(stream)); var graphic = reader.Graphic; graphic.Draw(canvas); }导出为SVG
var writer = new SvgWriter(); graphic.Write(writer); File.WriteAllText("output.svg", writer.ToString());上图展示了NGraphics渲染复杂SVG文件的能力
📱 跨平台支持
NGraphics支持多个平台的原生渲染:
Android平台
使用Android.Graphics.Canvas进行渲染,相关代码位于Platforms/NGraphics.Android/AndroidPlatform.cs
iOS/macOS平台
使用CoreGraphics.CGContext进行渲染,相关代码位于Platforms/NGraphics.Mac/ApplePlatform.cs
.NET平台
使用System.Drawing.Graphics进行渲染,相关代码位于Platforms/NGraphics.Net/SystemDrawingPlatform.cs
Windows平台
使用Direct2D进行渲染,相关代码位于Platforms/NGraphics.UWP/Direct2DCanvas.cs
🎯 高级功能
Mandelbrot分形渲染
NGraphics可以用于复杂的数学图形渲染:
var w = 600.0; var h = w * (2 / 3.5); var image = Platforms.Current.CreateImage((px, py) => { var x0 = px / w * (3.5) - 2.5; var y0 = py / h * (2) - 1; var x = 0.0; var y = 0.0; var iteration = 0; const int maxIterations = 1000; while (x*x + y*y < 2*2 && iteration < maxIterations) { var xtemp = x*x - y*y + x0; y = 2*x*y + y0; x = xtemp; iteration = iteration + 1; } return new Color(iteration / (double)maxIterations, 1); }, new Size(w, h), scale: 1);文本渲染
NGraphics支持高质量的文本渲染:
var font = new Font("Arial", 24); canvas.DrawText("Hello NGraphics!", new Rect(10, 10, 200, 50), font, TextAlignment.Center, pen: Pens.Black);🔧 编辑器工具
NGraphics还提供了一个代码编辑器,让您可以实时预览绘图效果:
编辑器位于NGraphics.Editor目录,支持实时编译和预览,大大提高了开发效率。
📊 性能优化技巧
使用保留模式
对于需要重复绘制的图形,使用保留模式可以提高性能:
// 创建图形对象 var circle = new Ellipse(new Rectangle(Point.Zero, new Size(10))); // 重复绘制 for (int i = 0; i < 100; i++) { circle.Draw(canvas); canvas.Translate(15, 0); }批量绘制
尽可能将多个绘图操作合并到一次绘制调用中:
// 批量绘制路径 var ops = new List<PathOp>(); ops.Add(new MoveTo(0, 0)); ops.Add(new LineTo(100, 0)); ops.Add(new LineTo(50, 100)); ops.Add(new ClosePath()); canvas.DrawPath(ops, pen: Pens.Black, brush: Brushes.Gray);🚀 实际应用场景
UI组件开发
NGraphics非常适合用于自定义UI组件的开发:
public class CustomButton : View { protected override void OnDraw(ICanvas canvas) { // 绘制圆角矩形背景 canvas.FillRectangle(Bounds, Colors.Blue); // 绘制文本 canvas.DrawText("Click Me!", Bounds, new Font("Arial", 16), TextAlignment.Center, brush: Brushes.White); } }图表绘制
创建自定义图表和可视化组件:
public void DrawBarChart(ICanvas canvas, double[] data) { var barWidth = canvas.Size.Width / data.Length; for (int i = 0; i < data.Length; i++) { var height = data[i] * canvas.Size.Height; var rect = new Rect(i * barWidth, canvas.Size.Height - height, barWidth - 2, height); canvas.FillRectangle(rect, Colors.Blue); } }📚 学习资源
官方文档
项目提供了详细的文档,包括:
- 核心API文档:NGraphics/
- 测试示例:NGraphics.Test/
- 平台特定实现:Platforms/
测试用例
查看测试文件是学习NGraphics的最佳方式:
- NGraphics.Test/ColorsToImageTests.cs - 颜色和图像处理
- NGraphics.Test/SvgReaderTests.cs - SVG文件读写
- NGraphics.Test/PathTests.cs - 路径绘制
🔍 调试技巧
查看渲染结果
NGraphics提供了方便的图片保存功能:
// 保存为PNG canvas.GetImage().SaveAsPng("output.png"); // 保存为JPEG canvas.GetImage().SaveAsJpeg("output.jpg", quality: 90);使用编辑器调试
利用NGraphics.Editor可以实时查看绘图效果,加快开发调试过程。
🎉 总结
NGraphics是一个功能强大且易于使用的跨平台.NET矢量图形库。无论您是初学者还是经验丰富的开发者,都可以快速上手并创建出色的图形应用。通过统一的API、高质量的原生渲染和完整的SVG支持,NGraphics为.NET生态系统的图形编程提供了优秀的解决方案。
开始您的矢量图形编程之旅吧!🎨
【免费下载链接】NGraphicsNGraphics is a cross platform library for rendering vector graphics on .NET. It provides a unified API for both immediate and retained mode graphics using high quality native renderers.项目地址: https://gitcode.com/gh_mirrors/ng/NGraphics
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考