C#基于SkiaSharp实现印章管理(6)

  除了文本,印章设计模块的绘图功能已经差不多了。在实现文本绘制之前(主要是文本绘制相对比较麻烦),本文先实现将印章导出为pdf或图片的功能。
  不论是在控件中绘制,还是在图片或pdf文件中绘制印章,对SkiaSharp而言都是获取SKCanvas对象,然后开始画图。因此需要重构之前直接写在SKControl控件的PaintSurface事件中的绘图函数,定义如下函数供不同形式的绘图需要。

void DrawSeal(SKCanvas canvas, float unitSize)

  针对图片而言,创建SKBitmap对象绘图,然后基于其创建SKCanvas对象绘图,主要代码如下所示。这里有个问题还没有处理,计算单位尺寸的时候使用的SKControl控件的dpi,暂时不清楚如何获取或者设置图片的dpi。

Func<float, int, float> unitConverter = m_currSeal.UnitType == UnitType.Pixel ? CommonFunction.Pixel2Pixel : CommonFunction.MM2Pixel; 
float unitSize = unitConverter(1, skBoard.DeviceDpi);
using SKBitmap bitmap = new SKBitmap(Convert.ToInt32(unitSize * m_currSeal.Width), Convert.ToInt32(unitSize * m_currSeal.Height));

DrawSeal(new SKCanvas(bitmap), unitSize);
bitmap.ToBitmap().Save(saveFileDialog.FileName);

  针对pdf而言,主要使用SKDocument.CreatePdf函数创建pdf文档,然后调用SKDocument. BeginPage创建绘图对象,这里pdf采用的SKDocument的默认dpi(72),也可以通过SKDocumentPdfMetadata对象在CreatePdf函数时指定dpi,主要代码如下。

using SKDocument doc = SKDocument.CreatePdf(saveFileDialog.FileName);
Func<float, int, float> unitConverter = m_currSeal.UnitType == UnitType.Pixel ? CommonFunction.Pixel2Pixel : CommonFunction.MM2Pixel; ;

float unitSize = unitConverter(1, (int)SKDocument.DefaultRasterDpi);
SKCanvas canvas = doc.BeginPage(unitSize * m_currSeal.Width, unitSize * m_currSeal.Height);
DrawSeal(canvas, unitSize);
doc.EndPage();
doc.Close();

  最后是程序运行效果及导入的pdf和图片效果。
在这里插入图片描述
在这里插入图片描述

参考文献:
[1]https://learn.microsoft.com/zh-cn/dotnet/api/skiasharp?view=skiasharp-2.88
[2]https://www.cnblogs.com/bhnian/p/16343557.html
[3]https://www.jb51.net/html5/676291.html
[4]https://blog.csdn.net/L_Shaker/article/details/127313457
[5]https://www.cnblogs.com/sunnytrudeau/p/15570085.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值