CodeXchange Thursday, March 28, 2024
Home
What's it?
Download
Register
My Snippets
Add Snippet
Search
Faq
Contact Us
Sponsors

Website hosted by


Code Snippet Preview

Review the code snippet before inserting it on your project.

Snippet Metadata
Summary: Creating CAPTCHA Image
Language: C#
Author: Utkarsh Shigihalli
Author snippets RSS:
Culture: en-US
Bytes: 2732
Visual Studio 2005 Snippet:

Snippet Stats
Downloads: 1
Overall rating : 0
Average rating : Snippet rating

Snippet Preview
Code:
// ====================================================================
// Creates the bitmap image.
// ====================================================================
private void GenerateImage()
{
  // Create a new 32-bit bitmap image.
  Bitmap bitmap = new Bitmap(
    this.width,
    this.height,
    PixelFormat.Format32bppArgb);
  // Create a graphics object for drawing.
  Graphics g = Graphics.FromImage(bitmap);
  g.SmoothingMode = SmoothingMode.AntiAlias;
  Rectangle rect = new Rectangle(0, 0, this.width, this.height);
  // Fill in the background.
  HatchBrush hatchBrush = new HatchBrush(
    HatchStyle.SmallConfetti,
    Color.LightGray,
    Color.White);
  g.FillRectangle(hatchBrush, rect);
  // Set up the text font.
  SizeF size;
  float fontSize = rect.Height + 1;
  Font font;
  // Adjust the font size until the text fits within the image.
  do
  {
    fontSize--;
    font = new Font(
      this.familyName,
      fontSize,
      FontStyle.Bold);
    size = g.MeasureString(this.text, font);
  } while (size.Width > rect.Width);
  // Set up the text format.
  StringFormat format = new StringFormat();
  format.Alignment = StringAlignment.Center;
  format.LineAlignment = StringAlignment.Center;
  // Create a path using the text and warp it randomly.
  GraphicsPath path = new GraphicsPath();
  path.AddString(
    this.text,
    font.FontFamily,
    (int) font.Style,
    font.Size, rect,
    format);
  float v = 4F;
  PointF[] points =
  {
    new PointF(
      this.random.Next(rect.Width) / v,
      this.random.Next(rect.Height) / v),
    new PointF(
      rect.Width - this.random.Next(rect.Width) / v,
      this.random.Next(rect.Height) / v),
    new PointF(
      this.random.Next(rect.Width) / v,
      rect.Height - this.random.Next(rect.Height) / v),
    new PointF(
      rect.Width - this.random.Next(rect.Width) / v,
      rect.Height - this.random.Next(rect.Height) / v)
  };
  Matrix matrix = new Matrix();
  matrix.Translate(0F, 0F);
  path.Warp(points, rect, matrix, WarpMode.Perspective, 0F);
  // Draw the text.
  hatchBrush = new HatchBrush(
    HatchStyle.LargeConfetti,
    Color.LightGray,
    Color.DarkGray);
  g.FillPath(hatchBrush, path);
  // Add some random noise.
  int m = Math.Max(rect.Width, rect.Height);
  for (int i = 0; i < (int) (rect.Width * rect.Height / 30F); i++)
  {
    int x = this.random.Next(rect.Width);
    int y = this.random.Next(rect.Height);
    int w = this.random.Next(m / 50);
    int h = this.random.Next(m / 50);
    g.FillEllipse(hatchBrush, x, y, w, h);
  }
  // Clean up.
  font.Dispose();
  hatchBrush.Dispose();
  g.Dispose();
  // Set the image.
  this.image = bitmap;
}

//Detail: http://www.brainjar.com/dotNet/CaptchaImage/

Snippet Comments
Comments:
No comments for this snippet

Other snippets that may interest you..
Related Snippets
TDT - GridPage - Page_Init (C#)
CustomValitaor (C#)
(C#)
Get the file extension from a file path or file name (VB.NET)
grab record from db and subtracts it from variable (VB.NET)



Copyright ©2009-2024 CodeXchange. Server version 1.0.3720.32855 Client Version 0.9.0.0

With from Barcelona

Most Helpful members
These are the members who have received the most points for their helpful samples
Zepho Zep
Robert Wagner
Galen Taylor

All time 'Hall of fame'
Formating a file size and adding the B, KB, MB and GB extension appropriately with string.Format (C#)
INI File Access (VB.NET)
Read XML from string into DataSet (C#)
Create Manifest File for your Application (VB.NET)
Round function to avoid banker's rounding (VB.NET)
Get Short and Long Path Names (VB.NET)
Sending Mail through authenticated SMTP server (C#)
One Way Hash for strings (C#)
Formating a file size and adding the B, KB, MB and GB extension appropriately with string.Format (C#)
How do I load an image from a URI address? (VB.NET)
Use our easy to use Visual Studio.NET addin client and start sharing code snippets with the CodeXchange community!
Refreshed: Thursday, March 28, 2024