首页 > 编程语言 >VectSharp一个C#轻量级矢量图形库

VectSharp一个C#轻量级矢量图形库

时间:2024-05-08 18:55:18浏览次数:21  
标签:C# SVG 矢量 标签 图形库 页面 page 轻量级 VectSharp

VectSharp 是一个功能强大的 C# 库,专门用于创建矢量图形,包括文本,不依赖任何第三方,支持跨平台运行,包括 Mac、Windows 和 Linux。使得开发者可以更容易地在他们的项目中集成矢量图形的生成和处理。
https://github.com/arklumpus/VectSharp

特点:
内置字体:
包含了 14 种标准字体,这些字体最初是在 ASL-2.0(Apache Software License 2.0)许可下发布的。多种格式:提供了一个抽象层,允许开发者编写不同的输出层来生成不同类型的图形文件。目前支持的输出层包括 PDF、SVG、PNG 以及使用 Avalonia UI 库的 Canvas 对象。光栅图像支持:VectSharp.Raster 能够将矢量图形渲染为 PNG 格式的光栅图像,而 VectSharp.Raster.ImageSharp 则支持多种格式的光栅图像生成。3D 图形:VectSharp.ThreeD 为库增加了三维矢量和光栅图形的支持。图表绘制:VectSharp.Plots 包提供了一系列工具来绘制不同类型的图表,如散点图、折线图、条形图等。Markdown 支持:VectSharp.Markdown 允许将 Markdown 文档转换为矢量图形对象,进而可以导出为 PDF、SVG 或在 Avalonia Canvas 中显示。图像处理工具:VectSharp 提供了 VectSharp.MuPDFUtils 和 VectSharp.ImageSharpUtils 两个工具集,分别使用 MuPDFCore 和 SixLabors.ImageSharp 库来处理图像,以适应不同的需求和许可要求。动画制作:VectSharp 的基础包中包含了一个动画类,可以创建并保存为动画 GIF、SVG 或 PNG 格式的动画。

示例代码

using VectSharp;
using VectSharp.PDF;
using VectSharp.SVG;

// 创建一个新的文档对象
Document document = new Document();

// 创建一个新的页面对象,指定页面的宽度和高度为 1000 单位
Page page = new Page(1000, 1000);

// 将创建的页面添加到文档的页面集合中
document.Pages.Add(page);

// 绘制一个填充的矩形,使用灰色,设置一个标签
page.Graphics.FillRectangle(100, 100, 800, 50, Colour.FromRgb(128, 128, 128), tag: "linkToGitHub");

// 绘制第二个填充的矩形,使用红色,并设置一个标签
page.Graphics.FillRectangle(100, 300, 800, 50, Colour.FromRgb(255, 0, 0), tag: "linkToBlueRectangle");

// 绘制第三个填充的矩形,使用蓝色,并设置一个标签
page.Graphics.FillRectangle(100, 850, 800, 50, Colour.FromRgb(0, 0, 255), tag: "blueRectangle");

//绘制文字
page.Graphics.FillText(250, 250, "示例", new Font(VectSharp.FontFamily.ResolveFontFamily(VectSharp.FontFamily.StandardFontFamilies.TimesRoman), 80), Colour.FromRgb(0, 0, 0));

// 创建一个字典,用于存储标签和链接 URL 的映射关系
Dictionary<string, string> links = new Dictionary<string, string>() {
    // 添加一个标签到 URL 的映射
    { "linkToGitHub", "https://github.com/&#34;" },
    // 添加另一个标签到页面内锚点的映射
    { "linkToBlueRectangle", "#blueRectangle" }
};

// 将页面导出为 SVG 文件
page.SaveAsSVG(@"Links.svg", linkDestinations: links);

// 将整个文档导出为 PDF 文件
document.SaveAsPDF(@"Links.pdf", linkDestinations: links);

 

标签:C#,SVG,矢量,标签,图形库,页面,page,轻量级,VectSharp
From: https://www.cnblogs.com/firespeed/p/18180664

相关文章

  • SSL error:0909006C:PEM routines:get_name:no start line: crypto/pem/pem_lib.c:745
    在anolis上编译内核时碰到-SSLerror:0909006C:PEMroutines:get_name:nostartline:crypto/pem/pem_lib.c:745的问题,#makemodules_installINSTALL/lib/modules/6.9.0-rc1/modules.orderINSTALL/lib/modules/6.9.0-rc1/modules.builtinINSTALL/lib/modules/6.9......
  • org.apache.catalina.LifecycleException: Protocol handler start failed
    出现问题org.apache.catalina.LifecycleException:Protocolhandlerstartfailed,是因为端口号被占用1、按键盘上windows+R,输入CMD(不区分大小写)2、输入netstat-ano回车,查看所有进程(注意”-“前面有空格)3、输入netstat-ano|findstr"端口号"(注意”-“前面有空格)4、输入ta......
  • Spring SpringMVC——前端控制器初始化过程
     创建完DispatcherServlet对象时,会执行类中的init方法 如果不配置load-on-startup,那么DispatcherServlet将在第一次收到请求时才会被实例化和初始化。这意味着DispatcherServlet不会在服务器启动时立即执行创建和初始化的操作。当第一个请求到达时,Servlet容器(如Tomca......
  • abc146e-ti-jie
    abc146e思路由题,$k\mid(a_l+a_{l+1}+...+a_{r-1}+a_r)-(r-l+1)$,可以转换为平均每个数在模$k$下都贡献了$1$。所以对区间每个数都减$1$,则长度为$len$的区间和减了$len$,此时如果区间和为$k$的倍数则符合条件。预处理对$k$取模的前缀和$sum_i$,如果$sum_{l-1}=sum_r$......
  • 240229-mo-ni-sai-t1-xu-lie-sequence-ti-jie
    P4778240229模拟赛T1序列(sequence)的第二问。题意求一个排列每次交换两个位置变成$1\dotsn$的方案数。思路分开考虑每个环。设$f_i$表示大小为$i$的环的答案。每交换一次就将一个环分为两个环。枚举分成的较小的一边是什么,乘两边单独的方案数,两边独立乘一个组合数,......
  • cf433c-ti-jie
    CF433C思路出于习惯,调换$n$和$m$,$n$为数组长度,$m$为值域。考虑枚举被替换的$a_i$。枚举值域$1$到$m$的权值$x$。每个权值为$x$的点$a_i$的贡献是$\mida_i-a_{i-1}\mid+\mida_i-a_{i+1}\mid$。由于$a_i$被更改,贡献会随之变化,与之有关的是所有$a_i$的左......
  • cf396c-ti-jie
    CF396C思路对于一个点维护$b_i=a_i-a_{fa_i}$。对于操作一,等价于$b_u$加$x$,$u$的子树不含$u$的每个点和父亲的差都减$k$。对于操作二,等价于从根到$u$路径上的$b_x$的和。同P3178,子树加,路径查,树剖加线段树。codeintn,q;inthead[maxn],tot;structnd{ intnxt......
  • arc162f-ti-jie
    arc162f思路$a_{x1,y2}\timesa_{x2,y2}\leqa_{x1,y2}\timesa_{x2,y1}$改为所有$a_{x1,y1}=a_{x2,y2}=1$,都有$a_{x1,y2}=a_{x2,y1}=1$。观察发现,第$i$行$a_{i,j_1}=\ldots=a_{i,j_{num}}=1,(j_1<\ldots<j_{num})$,第$ii,(ii>i)$行能取$1$的位置是$[1,j_1-1]$和......
  • arc119f-ti-jie
    arc119f自动机写法。开始在做的时候题解没讲每个节点代表什么状态,自己推了一遍,记录一下。思路计数,求有多少种替换方式使得$0$到$n$存在一条长度小于等于$K$的路径。可以做$O(n^3)$的dp。设$dp_{i,a,b}$表示前$i$个位置,最近的$A$和$B$分别在$a$和$b$。官方......
  • arc106d-ti-jie
    ARC106D思路左边到右边不好,改为任意一个到另一个。$$ans_x=\frac{1}{2}(\sum_in\sum_jn(a_i+a_j)x-\sum_in(2\timesa_i)^x)$$拆开$k$次方。$$(a_i+a_j)x=\sum_{k=0}x(\binom{x}{k}\times{a_i}^k\times{a_j}^{x-k})$$$$ans_x=\frac{1}{2}(\sum_{k=0}x(\sum_in{a_i}^......