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(30, 50);
            Point p2 = new Point(250, 250);

            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(30, 50);
            Point p2 = new Point(250, 250);

            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(80,120);
            Rectangle rec = new Rectangle(new Point(50,50),size);
            g.DrawRectangle(pen, rec);
        }
    }
}

GDI绘制直线

那么有了基本的了解就可以用类似的方法来绘制验证码了。主要包括绘制字符串、直线、点三部分,在BitMap位图上面绘制,然后将整个图片镶嵌到PictureBox中,单击该控件爱你,验证码发生变化。具体代码如下

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9
10 namespace 点击生成验证码
11 {
12     public partial class Form1 : Form
13     {
14         public Form1()
15         {
16             InitializeComponent();
17         }
18
19         /// <summary>
20         /// 点击更换验证码
21         /// </summary>
22         /// <param name="sender"></param>
23         /// <param name="e"></param>
24         private void pictureBox1_Click(object sender, EventArgs e)
25         {
26             Random r = new Random();
27             string str = null;
28             for (int i = 0; i < 5; i++)
29             {
30                 int rNumber = r.Next(0, 10); //产生5个验证码随机数
31                 str += rNumber.ToString();
32
33             }
34
35             Bitmap bmp = new Bitmap(150, 120);
36            //创建一个GDI对象
37             Graphics g = Graphics.FromImage(bmp); //可以理解为将位图作为画布
38
39             //绘制验证码上面的数字
40             for (int i = 0; i < 5; i++)
41             {
42                 Point p=new Point(i*20,0); //此处的相对位置,不是相对窗体的,而是相对于pictureBox控件的
43                 string[] font = {"微软雅黑","宋体","黑体","隶书","仿宋" };
44                 Color[] colors = { Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Green };
45
46                 g.DrawString(str[i].ToString(), new Font(font[r.Next(0,5)],20,FontStyle.Bold),new SolidBrush(colors[r.Next(0,5)]), p); //此处注意字体对象包括字体、像素、加粗与否等等
47
48
49             }
50
51             //绘制验证码上面的线
52             for (int i = 0; i < 50; i++)
53             {
54                 Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
55                 Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
56                 g.DrawLine(new Pen(Brushes.Green), p1, p2);
57             }
58
59             //将验证码上面加一些小点点
60             for (int i = 0; i < 500; i++)
61             {
62                 Point p3 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
63                 bmp.SetPixel(p3.X,p3.Y,Color.Yellow);
64             }
65             //将画好的位图赋值给Image属性,即将画好的图片镶嵌到pictureBox中
66             pictureBox1.Image = bmp;
67         }
68     }
69 }

绘制数字验证码

实现效果图:

时间: 2024-08-29 00:40:28

GDI+在绘制验证码中的使用的相关文章

使用GDI绘制验证码

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 使用GDI绘制验证码B { public parti

C#中的GDI+图形绘制方法

GDI+图形绘制方法 1.首先对于绘制图形,必须的先将命名空间导入:using System.Drawing.Drawing2D; 2.然后在一个事件中写入程序 首先先将Graphics这个对象实例化: 然后就是实例化笔(pen)或者刷子(brush): 对于笔的实例化Pen mypen = new Pen(Color(选择颜色),笔的线条粗度) 刷子的实例化 solidbrush:它的实例化只需要指定color属性值就可以了: hatchbrush:它的实例化需要指定所需要绘制的图形以及颜色:

通过GDI+绘制 验证码

只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 GDI+绘制验证码 以下为运行结果图

【Windows编程】系列第五篇:GDI图形绘制

上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我

gdi+ 快速绘制透明窗口

gdi+ 快速绘制透明窗口: 方法一: 1.用Iamge对象加载png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗口进行布局 方法二: 1.用Bitmap对象加载资源 2.通过CDC选中,再用bitblt拷贝或者AlphaBlend融合到目标CDC上. 3.UpdateLayeredWindow对目标CDC上的hdc进行布局,达到融合背景的效果. 方法一是比较常规的方法,但是drawimage函数的效率太低,如果要实现实时更新的话就会有问题

gdi+ 高速绘制透明窗体

gdi+ 高速绘制透明窗体: 方法一: 1.用Iamge对象载入png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗体进行布局 方法二: 1.用Bitmap对象载入资源 2.通过CDC选中,再用bitblt拷贝或者AlphaBlend融合到目标CDC上. 3.UpdateLayeredWindow对目标CDC上的hdc进行布局,达到融合背景的效果. 方法一是比較常规的方法,可是drawimage函数的效率太低,假设要实现实时更新的话就会有问题

使用Java绘制验证码

效果图: JDemo.java import java.io.File; import java.io.IOException; import static java.lang.System.out; import javax.imageio.ImageIO; public class JDemo { public static void main(String[] args) throws IOException { VerificationCode verificationCode = ne

C#GDI+自定义绘制曲线图表控件DataChart 简单实现

C#GDI+自定义绘制曲线图表控件DataChart 这里只说明在计算刻度和曲线绘制的时候 只提供思路,只是做了下简单的计算,不喜勿喷 还望见谅,高手直接飘过吧.这个要做好,还是需要研究研究算法的,比如刻度随着控件的大小发生改变的时候计算不同的值,根据刻度范围来计算刻度以及刻度值等,这里没有研究,制作简单的绘制,让其知道自定义曲线控件的画法,对于新手来讲应该是有一些帮助的.有时间我把研究过后的算法加上做一个通用可靠一点的控件分享. 例子如下图所示 首先百度一张图片,就按照它的样子来绘制 该图片链

C# GDI绘制验证码

步骤: 1.通过Random生成随机数或字符及验证码 2.通过验证码内容长度生成指定大小的图片 3.获取生成图片的Graphics对象 4.定义验证码字体格式 5.通过指定字体将验证码绘制到图片 6.向图片上添加背景噪音线 7.添加前景噪音点 1 private void pictureBox1_Click(object sender, EventArgs e) 2 { 3 Random r = new Random(); 4 string str = null; 5 for (int i =