首页 > 编程 > C# > 正文

C#自定义签名章实现方法

2019-10-29 21:39:06
字体:
来源:转载
供稿:网友

这篇文章主要介绍了C#自定义签名章实现方法,涉及C#图形绘制的相关实现技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了C#自定义签名章实现方法。分享给大家供大家参考。具体实现方法如下:

 

 
  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Drawing; 
  6. using System.Drawing.Imaging; 
  7. using System.Drawing.Drawing2D; 
  8. namespace WfpApp 
  9. public class DrawCachet 
  10. /// <summary> 
  11. /// 自定义椭圆形签名章 
  12. /// </summary> 
  13. /// <param name="Width">宽度,画出的签名章只有这宽度的一半</param> 
  14. /// <param name="Height">高度,画出的签名章只有这高度的一半</param> 
  15. /// <param name="test">签名章上名字</param> 
  16. /// <param name="IsRotate">签名章是否旋转角度</param> 
  17. /// <param name="angle">旋转角度的大小</param> 
  18. /// <returns></returns> 
  19. public static Bitmap GetDrawCircleCachet(int Width, int Height, string test, bool IsRotate, int angle) 
  20. //记录圆画笔的粗细  
  21. int Circle_Brush = 2; 
  22. //画布 
  23. Bitmap bitmap = new Bitmap(Width, Height); 
  24. //定义字符串的样式  
  25. Font var_Font = new Font("Arial", 13, FontStyle.Bold); 
  26. //定义一个矩形 ,设置圆的绘制区  
  27. Rectangle rect = new Rectangle(10, 10, Width / 2, Height / 2); 
  28. //实例化Graphic类  
  29. Graphics g = System.Drawing.Graphics.FromImage(bitmap); 
  30. //消除绘制图形的锯齿,平滑 
  31. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
  32. //以白色清空panelCachet画布背景  
  33. g.Clear(Color.White); 
  34. //设置画笔的颜色 
  35. Pen mypen = new Pen(Color.Red, Circle_Brush); 
  36. //绘制圆  
  37. g.DrawEllipse(mypen, rect); 
  38. //设置文字的字体样式  
  39. Font star_Font = new Font("Arial", 12, FontStyle.Regular); 
  40. //对字符串进行宽度和长度测量  
  41. SizeF var_Size = g.MeasureString(test, star_Font); 
  42. float CircleZjW = rect.Width + 2 * Circle_Brush; 
  43. float CircleZJH = rect.Height + 2 * Circle_Brush; 
  44. float x = (CircleZjW - var_Size.Width) / 2F + rect.X; 
  45. float y = (CircleZJH - var_Size.Height) / 2F + rect.Y; 
  46. //在指定的位置绘制文字 
  47. g.DrawString(test, star_Font, mypen.Brush, new PointF(x, y)); 
  48. if (IsRotate) 
  49. bitmap = Rotate(bitmap, angle); 
  50. return bitmap; 
  51. /// <summary> 
  52. /// 自定义矩形签名章 
  53. /// </summary> 
  54. /// <param name="width">宽度,画出的签名章只有这宽度的一半</param> 
  55. /// <param name="height">高度,画出的签名章只有这高度的一半</param> 
  56. /// <param name="name">签名章上名字</param> 
  57. /// <param name="IsRotate">签名章是否旋转角度</param> 
  58. /// <param name="angle">旋转角度的大小</param> 
  59. /// <returns></returns> 
  60. public static Bitmap GetDrawRectangle(int width, int height, string name, bool IsRotate, int angle) 
  61. //记录圆画笔的粗细  
  62. int Circle_Brush = 2; 
  63. //画布 
  64. Bitmap bitmap = new Bitmap(width, height); 
  65. //定义字符串的样式  
  66. Font var_Font = new Font("Arial", 13, FontStyle.Bold); 
  67. //定义一个矩形 ,设置圆的绘制区  
  68. Rectangle rect = new Rectangle(10, 10, width / 2, height / 2); 
  69. //实例化Graphic类  
  70. Graphics g = System.Drawing.Graphics.FromImage(bitmap); 
  71. //消除绘制图形的锯齿,平滑 
  72. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
  73. //以白色清空panelCachet画布背景  
  74. g.Clear(Color.White); 
  75. //设置画笔的颜色 
  76. Pen mypen = new Pen(Color.Red, Circle_Brush); 
  77. //绘制圆  
  78. g.DrawRectangle(mypen, rect); 
  79. //设置文字的字体样式  
  80. Font star_Font = new Font("Arial", 12, FontStyle.Regular); 
  81. //对字符串进行宽度和长度测量  
  82. SizeF var_Size = g.MeasureString(name, star_Font); 
  83. float CircleZjW = rect.Width + 2 * Circle_Brush; 
  84. float CircleZJH = rect.Height + 2 * Circle_Brush; 
  85. float x = (CircleZjW - var_Size.Width) / 2F + rect.X; 
  86. float y = (CircleZJH - var_Size.Height) / 2F + rect.Y; 
  87. //在指定的位置绘制文字 
  88. g.DrawString(name, star_Font, mypen.Brush, new PointF(x, y)); 
  89. if (IsRotate) 
  90. bitmap = Rotate(bitmap, angle); 
  91. return bitmap; 
  92. /// <summary> 
  93. /// 签名章旋转 
  94. /// </summary> 
  95. /// <param name="b">Bitmap图章</param> 
  96. /// <param name="angle">旋转度</param> 
  97. /// <returns></returns> 
  98. static Bitmap Rotate(Bitmap b, int angle) 
  99. angle = angle % 360; 
  100. //弧度转换 
  101. double radian = angle * Math.PI / 180.0; 
  102. double cos = Math.Cos(radian); 
  103. double sin = Math.Sin(radian); 
  104. //原图的宽和高 
  105. int w = b.Width; 
  106. int h = b.Height; 
  107. int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); 
  108. int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); 
  109. //目标位图 
  110. Bitmap dsImage = new Bitmap(W, H); 
  111. System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); 
  112. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; 
  113. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
  114. //计算偏移量 
  115. Point Offset = new Point((W - w) / 2, (H - h) / 2); 
  116. //构造图像显示区域:让图像的中心与窗口的中心点一致 
  117. Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h); 
  118. Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); 
  119. g.TranslateTransform(center.X, center.Y); 
  120. g.RotateTransform(360 - angle); 
  121. //恢复图像在水平和垂直方向的平移 
  122. g.TranslateTransform(-center.X, -center.Y); 
  123. g.DrawImage(b, rect); 
  124. //重至绘图的所有变换 
  125. g.ResetTransform(); 
  126. g.Save(); 
  127. g.Dispose(); 
  128. //dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
  129. return dsImage; 

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表