Winform 简单绘制公章

来源:互联网 发布:阿里云代备案系统 编辑:程序博客网 时间:2024/04/28 04:45

               最近在研究GDI+画图,最主要的是调用NET类库中的Graphics类,利用该类可以实现各种绘图操作,本文使用Graphics类的DrawString方法、Draw Ellipse方法和MeasureString方法,分别在画布中绘制字符串、椭圆以及对字符串进行宽度和长度的测量(随文本字体变化)。分享一下,贴上核心代码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Drawing.Drawing2D;namespace GraphicsApp{    public partial class Cachet : Form    {        public Cachet()        {            InitializeComponent();            this.panelCachet.Paint += new PaintEventHandler(panelCachet_Paint);        }        Font var_Font = new Font("Arial", 13, FontStyle.Bold);//定义字符串的样式        Rectangle rect = new Rectangle(40, 40, 300, 300);//定义一个矩形        private void Cachet_Load(object sender, EventArgs e)        {        }        private void btnCachet_Click(object sender, EventArgs e)        {            PaintEventArgs ep = e as PaintEventArgs;            panelCachet_Paint(sender, ep);                    }        private void panelCachet_Paint(object sender, PaintEventArgs e)        {            int Circle_Line = 0;//记录圆的直径            int Circle_Brush = 4;//记录圆画笔的粗细            if (panelCachet.Width >= panelCachet.Height)//panelCachet的宽度大于高度            {                Circle_Line = panelCachet.Height;//设置高度为圆的直径            }            else            {                Circle_Line = panelCachet.Width;//设置宽度为圆的直径            }            //设置圆的绘制区            rect = new Rectangle(Circle_Line / 2 + Circle_Brush, Circle_Brush, Circle_Line - Circle_Brush * 2, Circle_Line - Circle_Brush * 2);            Font star_Font = new Font("Arial", 30, FontStyle.Regular);//设置星号的字体样式            string star_Str = "★";//设置星号的字符串            Graphics g = this.panelCachet.CreateGraphics();//实例化Graphic类            g.SmoothingMode = SmoothingMode.AntiAlias;//消除绘制图形的锯齿,平滑            g.Clear(Color.White);//以白色清空panelCachet画布背景            Pen mypen = new Pen(Color.Red, Circle_Brush);//设置画笔的颜色            g.DrawEllipse(mypen, rect);//绘制圆            SizeF var_Size = new SizeF(rect.Width, rect.Width);//实例化一个SizeF            var_Size = g.MeasureString(star_Str, star_Font);//对星号字符串进行宽度和长度测量            g.DrawString(star_Str, star_Font, mypen.Brush, new PointF(rect.Width + Circle_Brush - var_Size.Width / 2F, rect.Height / 2F - var_Size.Width / 2F));//在指定的位置绘制星号            var_Size = g.MeasureString("专用章", var_Font);//对指定字符串进行宽度和长度测量            g.DrawString("专用章", var_Font, mypen.Brush, new PointF(rect.Width + Circle_Brush - var_Size.Width / 2F, rect.Height / 2F + var_Size.Height * 2));            string tempstr = "重庆市XXX科技有限公司";            int len = tempstr.Length;            float angle = 180 + (180 - len * 20) / 2;//设置文字的旋转角度,以20度的弧度旋转            for (int i = 0; i < len; i++)//旋转每一个字            {                //将指定的平移添加到g的变换矩阵前                g.TranslateTransform((Circle_Line + Circle_Brush / 2) , (Circle_Line + Circle_Brush / 2) / 2);                g.RotateTransform(angle);//将指定的旋转用于Graphic类的变换矩阵                Brush mybrush = Brushes.Red;//定义画笔                g.DrawString(tempstr.Substring(i, 1), var_Font, mybrush, 60, 0);//显示旋转每一个文字                g.ResetTransform();//将Graphics类的全局变换矩阵重置为单位矩阵                angle += 20;//设置下一个文字的显示角度            }        }    }}

运行结果:


原创粉丝点击