九、利用GDI+绘制文本
绘制文本在GDI+是非常广泛的应用。就像常见的验证码。在GDI+中使用DrawString
DrawString(String,Font,Brush,PointF)
DrawString(String,Font,Brush,RectangleF)
DrawString(String,Font,Brush,PointF,StringFormat)
DrawString(String,Font,Brush,RectangleF,StringFormat)
DrawString(String,Font,Brush,Single,Single)
DrawString(String,Font,Brush,Single,Single,StringFormat)
private void Form1_Paint(object sender, PaintEventArgs e) { //创建画板从Paint事件中的直接引用Graphics对象 Graphics graphics = e.Graphics; graphics.Clear(Color.Black); //定义画笔 Pen pen = new Pen(Color.White, 3.0f); Pen thickPen = new Pen(Color.White,2.0f); Pen thick = new Pen(Color.Red, 2.0f); //定义字体 Font font = new Font("宋体",14); //定义画刷 Brush brush = Brushes.Wheat; //定义位置 Point point = new Point(100, 100); //定义点坐标 graphics.DrawString("Hello", font, brush, point); }
效果
下面开始做一个验证码的例子。后面逐渐会把验证码丰富起来,刚开始只是一个简单的。
private void Form1_Paint(object sender, PaintEventArgs e) { //创建画板从Paint事件中的直接引用Graphics对象 Graphics graphics = e.Graphics; graphics.Clear(Color.Black); //验证码长度 int intCheckCodeLength = 4; //先绘制一个现实验证码的区域 Rectangle rect = new Rectangle(200, 100, 220, 50); //填充的颜色 Brush brushRect = Brushes.White; graphics.FillRectangle(brushRect, rect); string[] strLetters = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; //字体名字 System.Drawing.Text.InstalledFontCollection fonts = new System.Drawing.Text.InstalledFontCollection(); string[] sbFonts = { "Arial", "Arial Black", "Bauhaus 93", "Consolas", "Courier New" }; float floatOffset = 50; for (int i = 0; i < intCheckCodeLength;i++ ) { Random rand = new Random(Guid.NewGuid().GetHashCode()); int rndLetter = rand.Next(0, 26); int rndFont = rand.Next(0,sbFonts.Length-1); Font font = new Font(sbFonts[rndFont].ToString(),32.0f); SolidBrush brush = new SolidBrush(Color.FromArgb(rand.Next(255),rand.Next(255),rand.Next(255))); graphics.DrawString(strLetters[rndLetter], font, brush, new PointF(205.0f+i*floatOffset, 100.0f)); } }