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 ...
随机推荐
- 不得不看的Java代码性能优化总结
原文:https://blog.csdn.net/mr_smile2014/article/details/50112723 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么 ...
- android应用中插入admob广告
Step One 登陆admob,注册用户 直接登陆http://www.admob.com/,用google的账号登陆 Step Two 登陆admob后,在站点和应用程序选项中 选择并添加and ...
- 02-1设置第一启动项--电脑怎么进入BIOS的方法集合
电脑怎么进入BIOS的方法集合 很多时候为了对电脑进行相关设置,我们必须进入电脑的bios界面,但是不同的电脑进入bios的方法各不相同,小编今天就在这儿将各种电脑进入bios的方法汇总一下,希望对你 ...
- MQTT--topic
1.topic 定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通信. 2. 主题层级分隔符—“/” 主题层级分隔符使得主题名结构化.如果存在分隔符,它将 ...
- 人不在囧途 便携式3G上网设备+套餐推介
来源: http://network.pconline.com.cn/317/3174920_all.html [PConline资讯]过年回家,本该是再高兴不过的事,可一想到要在路上颠簸数十个小时, ...
- R410自带SAS6IR卡折腾记
因为需要一些做一些自动编译的工作,所以打算淘换一台多核的主机.淘宝找一圈,感觉换下来的dell R410 ~ R710 都可以. 综合对比了一下感觉最低配的R410就能满足要求,最后选择了:X5675 ...
- 【PHP】富文本HTML过滤器:HTMLPurifier使用教程(防止XSS)
在编程开发时安全问题是及其重要的,对于用户提交的数据要进行过滤,XSS就是需要重视的一点,先说一下什么是XSS,简单来说就是用户提交数据(例如发 表评论,发表日志)时往Web页面里插入恶意javasc ...
- “-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数
[JAVA学习]“-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数 转载 2016年06月13日 19:33:38 2792 年轻代 年老代概念 htt ...
- 一站式WPF--依赖属性(DependencyProperty)
2009-10-20 11:32 by 周永恒, 22441 阅读, 24 评论, 收藏, 编辑 书接上文,前篇文章介绍了依赖属性的原理和实现了一个简单的DependencyProperty(DP), ...
- Hadoop学习笔记——Hadoop经常使用命令
Hadoop下有一些经常使用的命令,通过这些命令能够非常方便操作Hadoop上的文件. 1.查看指定文件夹下的内容 语法: hadoop fs -ls 文件文件夹 2.打开某个已存在的文件 语法: h ...