GDI+在绘制验证码中的使用
GDI+最简单的理解就是用来绘图的。其中包括点、直线、矩形、字符串等等。
先简单来个例子,说明如何在winform窗体中绘制一条直线,并且这条直线不随着窗体的移动而消失。
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; namespace GDIDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//一根笔 一张纸 两点 绘制直线的对象
} private void button1_Click(object sender, EventArgs e)
{
//创建一个GDI对象
Graphics g = this.CreateGraphics();//new Graphics(); //创建一支画笔对象
Pen pen = new Pen(Brushes.Yellow); //创建两个点
Point p1 = new Point(, );
Point p2 = new Point(, ); g.DrawLine(pen, p1, p2);
} /// <summary>
/// 重新绘制窗体的时候,直线也重新画一遍
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Paint(object sender, PaintEventArgs e)
{
//创建一个GDI对象
Graphics g = this.CreateGraphics();//new Graphics(); //创建一支画笔对象
Pen pen = new Pen(Brushes.Yellow); //创建两个点
Point p1 = new Point(, );
Point p2 = new Point(, ); g.DrawLine(pen, p1, p2);
} private void button2_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Brushes.Yellow);
Size size=new System.Drawing.Size(,);
Rectangle rec = new Rectangle(new Point(,),size);
g.DrawRectangle(pen, rec);
}
}
}
GDI绘制直线
那么有了基本的了解就可以用类似的方法来绘制验证码了。主要包括绘制字符串、直线、点三部分,在BitMap位图上面绘制,然后将整个图片镶嵌到PictureBox中,单击该控件爱你,验证码发生变化。具体代码如下
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; namespace 点击生成验证码
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// <summary>
/// 点击更换验证码
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_Click(object sender, EventArgs e)
{
Random r = new Random();
string str = null;
for (int i = ; i < ; i++)
{
int rNumber = r.Next(, ); //产生5个验证码随机数
str += rNumber.ToString(); } Bitmap bmp = new Bitmap(, );
//创建一个GDI对象
Graphics g = Graphics.FromImage(bmp); //可以理解为将位图作为画布 //绘制验证码上面的数字
for (int i = ; i < ; i++)
{
Point p=new Point(i*,); //此处的相对位置,不是相对窗体的,而是相对于pictureBox控件的
string[] font = {"微软雅黑","宋体","黑体","隶书","仿宋" };
Color[] colors = { Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Green }; g.DrawString(str[i].ToString(), new Font(font[r.Next(,)],,FontStyle.Bold),new SolidBrush(colors[r.Next(,)]), p); //此处注意字体对象包括字体、像素、加粗与否等等 } //绘制验证码上面的线
for (int i = ; i < ; i++)
{
Point p1 = new Point(r.Next(, bmp.Width), r.Next(, bmp.Height));
Point p2 = new Point(r.Next(, bmp.Width), r.Next(, bmp.Height));
g.DrawLine(new Pen(Brushes.Green), p1, p2);
} //将验证码上面加一些小点点
for (int i = ; i < ; i++)
{
Point p3 = new Point(r.Next(, bmp.Width), r.Next(, bmp.Height));
bmp.SetPixel(p3.X,p3.Y,Color.Yellow);
}
//将画好的位图赋值给Image属性,即将画好的图片镶嵌到pictureBox中
pictureBox1.Image = bmp;
}
}
}
绘制数字验证码
实现效果图:

GDI+在绘制验证码中的使用的更多相关文章
- 利用GDI+在Winfrom绘制验证码
string yzm: private void yangzhengma() { Bitmap bt = new Bitmap(70,22);//创建位图对象 Graphics gs = Graphi ...
- 通过GDI+绘制 验证码
只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using Syste ...
- C#验证码 使用GDI绘制验证码
首先展示一下效果图如下: C#中的GDI特别方便,很多方法我们只要简单的调用就可以实现很复杂的功能.具体实现过程如下: 首先创建一个windows窗体应用(测试使用,实际开发winform程序时在需要 ...
- C#中的GDI+图形绘制方法
GDI+图形绘制方法 1.首先对于绘制图形,必须的先将命名空间导入:using System.Drawing.Drawing2D; 2.然后在一个事件中写入程序 首先先将Graphics这个对象实例化 ...
- 笔记11:GDI 制作数字验证码
大二学长让我学下GDI绘制验证码,然后自己就试了试了.找了点视频看了下. 现在会画直线,矩形,字符串,制作验证码 一.绘制一条直线 private void button1_Click(object ...
- 如何用GDI+画个验证码
如何使用GDI+来制作一个随机的验证码 绘制验证码之前先要引用 using System.Drawing; using System.Drawing.Drawing2D; 首先,先写一个方法来取得验证 ...
- 【Windows编程】系列第五篇:GDI图形绘制
上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...
- WPF GDI+字符串绘制成图片(二)
原文:WPF GDI+字符串绘制成图片(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...
- WPF GDI+字符串绘制成图片(一)
原文:WPF GDI+字符串绘制成图片(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...
随机推荐
- (六)Thymeleaf的 th:* 属性之—— th: ->text& utext& href
th:*使用原因: for the sake of simplicity and compactness of the code samples(简化代码) the th:*notation is m ...
- 正则表达式匹配 href 和text内容
string pattern = @"<a[^>]*href=(""(?<href>[^""]*)""|' ...
- C# 使用UUID生成各种模式方法
UUID简单说明 常见的方式.可以利用数据库也可以利用程序生成,一般来说全球唯一. 优点: 1)简单,代码方便. 2)生成ID性能非常好,基本不会有性能问题. 3)全球唯一,在遇见数据迁移,系统数据合 ...
- DelphiXe 中静态数组TByteArray和动态数组TBytes /array of byte 的区别
在应用中发现静态数组和动态数组是有区别的: procedure TForm1.Button1Click(Sender: TObject);var RsltStream: TMemoryStream; ...
- android电话状态的监听
电话状态的监听: /*** * 继承PhoneStateListener类,我们能够又一次其内部的各种监听方法 然后通过手机状态改变时,系统自己主动触发这些方法来实现我们想要的功能 */ class ...
- Unity3D - 性能优化之Draw Call
Unity3D - 性能优化之Draw Call 分类: Unity 3D2012-09-13 11:18 1002人阅读 评论(0) 收藏 举报 性能优化引擎测试脚本图形算法 Unity(或者说基本 ...
- DMP
1.dmp-data mabagement platform数据管理平台 数据赋能,营销智变 2.定义 把分散的第一,第三方异构.多源数据进行整合,然后纳入统一技术平台中,并对这些数据进行标准化和细分 ...
- R中导入excel乱码的解决办法
本文操作系统环境为win10,使用Rstdio. 要说明windows下在使用Rstdio的时候,在使用xlsx包,导入excel表乱码的解决办法. 1.我们先安装xlsx包 install.pack ...
- mybatis介绍安装
MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单 ...
- web 开发之js---js 实现自动添加input text 编辑框
<html><head><script type="text/javascript">function addNewLine(){var for ...