Introduction
After researching image processing I found this simple logic to generate a CAPTCHA code for human confirmation. This simple image generation using graphics may help the developer to generate a CAPTCHA code in a better way.
Concept behind the logic
Using the advantage of graphics, import a custom image into graphics as a draw sheet and render the text and whatever we require to be drawn in the CAPTCHA image. The complexity of the graphics used to generate the image is directly proportional to the complexity of the CAPTCHA image.
The following is the C# code behind the approach.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
generateImage();
}
int value = 0;
private void generateImage()
{
Random random = new Random (); // get a random instance
value = random.Next(10000, 99999); // get a random value between any range
var image = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height); // Get a bitmap
var font = new Font("TimesNewRoman", 25, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel); // Get a font
var graphics = Graphics.FromImage(image); // Get a graphics with the bitmap image
graphics.DrawString(value.ToString (), font, Brushes.Red, new PointF(0, 0)); // Add the value in the graphics
Pen p = new Pen(Brushes.Orange, 2.0f); // get pen width
graphics.DrawLine(p, new PointF(0,this.pictureBox1 .Height), new Point(this.pictureBox1.Width,0)); // draw a diagonal line
graphics.DrawLine(p, new PointF(0,0), new Point(this.pictureBox1.Width , this.pictureBox1.Height)); // draw another diagonal line
p.Dispose(); // dispose the pen to avoid memory leak
graphics.SmoothingMode = SmoothingMode.AntiAlias; // Smoothing the pixel
graphics.TextRenderingHint = TextRenderingHint.AntiAlias; // Smoothing the text rendering because stem width may differ
this.pictureBox1.Image = image; // load the image in the picturebox
}
private void button2_Click(object sender, EventArgs e)
{
this.generateImage();
}
private void button1_Click(object sender, EventArgs e)
{
if (this.textBox1.Text == value.ToString())
{
MessageBox.Show("Long live Tamil! வாழ்க தமிழ்!");
}
else
{
MessageBox.Show("the value you have entered is wrong");
textBox1.Text = String.Empty;
}
}
}
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.textBox1 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(112, 122);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(93, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Enter";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(112, 41);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(93, 25);
this.pictureBox1.TabIndex = 1;
this.pictureBox1.TabStop = false;
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(112, 72);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(93, 20);
this.textBox1.TabIndex = 2;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(0, 75);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(106, 13);
this.label1.TabIndex = 3;
this.label1.Text = "Enter the above text ";
//
// button2
//
this.button2.Location = new System.Drawing.Point(221, 41);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(77, 28);
this.button2.TabIndex = 4;
this.button2.Text = "Refresh";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(309, 181);
this.Controls.Add(this.button2);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Tamil";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button2;
}
Screen Shot