原文:WPF中实现验证码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37591671/article/details/79563449

WPF中实现验证码


1.效果图:

2. 实现思路:

首先建立Bitmap对象,绘图,将生成的Bitmap转换为ImageSource,在wpf的Image控件中将ImageSource赋值给Image.Source。

3. 具体实现:

3.1 首先封装一个生成验证码的类,返回为BitMap类型。需要引用using System.Drawing;命名空间。



VerifyCodeHelper类:

 public class VerifyCodeHelper
{
public static Bitmap CreateVerifyCode(out string code)
{
//建立Bitmap对象,绘图
Bitmap bitmap = new Bitmap(200, 60);
Graphics graph = Graphics.FromImage(bitmap);
graph.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);
Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
Random r = new Random();
string letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789"; StringBuilder sb = new StringBuilder(); //添加随机的五个字母
for (int x = 0; x < 5; x++)
{
string letter = letters.Substring(r.Next(0, letters.Length - 1), 1);
sb.Append(letter);
graph.DrawString(letter, font, new SolidBrush(Color.Black), x * 38, r.Next(0, 15));
}
code = sb.ToString(); //混淆背景
Pen linePen = new Pen(new SolidBrush(Color.Black), 2);
for (int x = 0; x < 6; x++)
graph.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
return bitmap;
}
}

3.2 封装一个图片转换的类,从Bitmap转换成ImageSource 。

ImageFormatConvertHelper类:

public  class ImageFormatConvertHelper
{ [DllImport("gdi32.dll", SetLastError = true)] private static extern bool DeleteObject(IntPtr hObject); /// <summary> /// 从bitmap转换成ImageSource /// </summary> /// <param name="icon"></param> /// <returns></returns> public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap) { //Bitmap bitmap = icon.ToBitmap(); IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); if (!DeleteObject(hBitmap)) { throw new System.ComponentModel.Win32Exception(); } return wpfBitmap; } }

3.3 上端使用。

img为WPF控件。

 public string  GetImage()
{
string code = "";
Bitmap bitmap = VerifyCodeHelper.CreateVerifyCode(out code);
ImageSource imageSource = ImageFormatConvertHelper.ChangeBitmapToImageSource(bitmap);
img.Source = imageSource;
return code;
}

最新文章

  1. 保持Qt GUI响应的几种方法
  2. 利用BI搭建零售业数据信息平台
  3. ASP.NET MVC之从控制器传递数据到视图四种方式(一)
  4. Angular.js为什么如此火呢?
  5. Android—进度条
  6. python3字符串格式化
  7. shell脚本初识
  8. mysql left( right ) join使用on 与where 筛选的差异
  9. phpstorm 设置多项目并存
  10. Presto集群部署
  11. jquery ajax 返回的json对象 新增属性值(干货)
  12. 知识小罐头04(idea+maven+部署war包到tomcat 下)
  13. 工具提高效率 - iterm2
  14. Django之Form验证
  15. NET操作RabbitMQ组件EasyNetQ
  16. 关于五子棋游戏java版
  17. 【4opencv】求解向量和轮廓的交点
  18. QWSLock::up(): Invalid argument
  19. 如何利用gulp构建前端自动化
  20. HTML5+CSS3 表格设计(Table)

热门文章

  1. OpenCV —— 图像处理
  2. OpenCV —— 写入AVI视频文件
  3. Activemq去除认证
  4. traceroute----追踪数据包在网络上的传输过程
  5. CSDN的个人主页如何添加微信二维码
  6. 洛谷 P1757 通天之分组背包
  7. SQlite-数据库的访问实例(转)
  8. worktools-git 工具的使用总结(知识点累积)
  9. holder.js如何使用
  10. linux下uboot kernel操作cpu寄存器