企业网站怎么做省钱,北京网站设计培训学校,wordpress 注册角色,可以免费看正能量的软件本系列第一篇文章中创建的基本框架限定了印章形状为矩形#xff0c;但常用的印章有方形、圆形等多种形状#xff0c;本文调整程序以支持定义并显示矩形、圆角矩形、圆形、椭圆等4种形式的印章背景形状。 定义印章背景形状枚举类型#xff0c;矩形、圆形、椭圆相关的尺寸… 本系列第一篇文章中创建的基本框架限定了印章形状为矩形但常用的印章有方形、圆形等多种形状本文调整程序以支持定义并显示矩形、圆角矩形、圆形、椭圆等4种形式的印章背景形状。 定义印章背景形状枚举类型矩形、圆形、椭圆相关的尺寸能够根据印章宽度、高度计算但圆角矩形需额外增加圆角半径尺寸因此调整印章数据结构定义如下
public enum BgType
{Rect0,RoundRect1,Circle2,Oval3
}public class SealInfo
{/// summary/// 印章名称/// /summarypublic string Name { get; set; }string.Empty;/// summary/// 印章宽度/// /summarypublic float Width { get; set; } 0;/// summary/// 印章高度/// /summarypublic float Height { get; set; } 0;/// summary/// 尺寸单位类型默认为毫米/// /summarypublic UnitType UnitType { get; set; } UnitType.Mm;/// summary/// 印章背景色默认白色/// /summarypublic SKColor BgColor { get; set; }SKColors.White;/// summary/// 背景形状类型/// /summarypublic BgType BgType { get; set; } BgType.Rect;/// summary/// 圆角半径/// /summarypublic float CornerRadius { get; set; } 0;/// summary/// 是否有边框/// /summarypublic bool HasBorder { get; set; } false;/// summary/// 边框宽度/// /summarypublic float BorderWidth { get; set; } 1;/// summary/// 边框颜色/// /summarypublic SKColor BorderColor { get;set; } SKColors.Red;
}虽然SKPaint的Style 属性可以设置同时绘制边框和底色值定义为StrokeAndFill但还没有在帮助文档或其它文档中看到边框和底色不同颜色时的设置和绘制方式因此只能采用比较笨的方式先绘制底色再绘制边框同一个绘制函数调用两次两次之间修改绘制方式和绘制颜色。采用SKPath对象保存不同类型的印章形状最终调用canvas.DrawPath函数统一绘制底色和边框主要代码如下
Funcfloat, int, float unitConverter m_currSeal.UnitType UnitType.Pixel ? CommonFunction.Pixel2Pixel : CommonFunction.MM2Pixel; ;SKCanvas canvas e.Surface.Canvas;canvas.Clear();SKPaint skPaint new SKPaint();
skPaint.Style SKPaintStyle.Fill;
skPaint.Color m_currSeal.BgColor;float borderWidth unitConverter(m_currSeal.BorderWidth, skBoard.DeviceDpi);
SKRect rect new SKRect(borderWidth / 2, borderWidth / 2, unitConverter(m_currSeal.Width, skBoard.DeviceDpi) - borderWidth / 2, unitConverter(m_currSeal.Height, skBoard.DeviceDpi) - borderWidth / 2);SKPath path new SKPath();switch (m_currSeal.BgType)
{case BgType.Rect:path.AddRect(rect);break;case BgType.RoundRect:path.AddRoundRect(new SKRoundRect(rect, unitConverter(m_currSeal.CornerRadius, skBoard.DeviceDpi)));break;case BgType.Circle:path.AddCircle(rect.MidX, rect.MidY, Math.Min(rect.Height / 2, rect.Width / 2));break;case BgType.Oval:path.AddOval(rect);break;
}canvas.DrawPath(path, skPaint);if(m_currSeal.HasBorder)
{skPaint.StrokeWidth borderWidth;skPaint.Style SKPaintStyle.Stroke;skPaint.Color m_currSeal.BorderColor;canvas.DrawPath(path, skPaint);
}最后是程序运行效果如下图所示
参考文献: [1]https://learn.microsoft.com/zh-cn/dotnet/api/skiasharp?viewskiasharp-2.88