2019独角兽企业重金招聘Python工程师标准>>>

在一些输入法程序菜单中经常有手写板功能,这些功能如何实现呢?

最直接的,我们可以使用Windows提供的GDI技术或GDI+技术来实现绘图功能。但是,要实现一个如此简单的涂鸦板,也不是那么容易的事情。幸运的是,我们可以直接使用OMCS提供的内置集成了这种功能的一个WinForm控件HandwritingPanel

HandwritingPanel控件的主要接口,代码

将HandwritingPanel控件从工具箱拖到你的UI上,可以通过PenColor和PenWidth属性设置画笔的颜色和粗细。运行起来后,就可以在控件的表面进行涂鸦和手写了。

如果需要清空手写板,则调用Clear方法。

当手写结束的时候,则调用GetHandWriting方法得到手写的结果,并保存为位图。位图的大小即是HandwritingPanel控件的尺寸。

OK,下面我们就写了一个使用HandwritingPanel来实现手写涂鸦板的demo,demo的主要代码如下所示

[csharp]  view plain copy
  1. public partial class HandwritingForm : Form
  2. {
  3. private Color currentColor = Color.Red;
  4. private List<float> penWidthList = new List<float>();
  5. private Bitmap currentImage;
  6. public Bitmap CurrentImage
  7. {
  8. get { return currentImage; }
  9. }
  10. public HandwritingForm()
  11. {
  12. InitializeComponent();
  13. this.handwritingPanel1.PenColor = this.currentColor; //设置画笔颜色
  14. this.penWidthList.Add(2);
  15. this.penWidthList.Add(4);
  16. this.penWidthList.Add(6);
  17. this.penWidthList.Add(8);
  18. this.penWidthList.Add(10);
  19. this.comboBox_brushWidth.DataSource = this.penWidthList;
  20. this.comboBox_brushWidth.SelectedIndex = 1;
  21. }
  22. private void button_color_Click(object sender, EventArgs e)
  23. {
  24. try
  25. {
  26. this.colorDialog1.Color = this.currentColor;
  27. DialogResult result = this.colorDialog1.ShowDialog();
  28. if (result == DialogResult.OK)
  29. {
  30. this.currentColor = this.colorDialog1.Color;
  31. this.handwritingPanel1.PenColor = this.currentColor;   //设置画笔颜色
  32. }
  33. }
  34. catch (Exception ee)
  35. {
  36. MessageBox.Show(ee.Message);
  37. }
  38. }
  39. //设置画笔宽度
  40. private void comboBox_brushWidth_SelectedIndexChanged(object sender, EventArgs e)
  41. {
  42. if (this.comboBox_brushWidth.SelectedIndex > 0)
  43. {
  44. this.handwritingPanel1.PenWidth = this.penWidthList[this.comboBox_brushWidth.SelectedIndex];
  45. }
  46. else
  47. {
  48. this.handwritingPanel1.PenWidth = this.penWidthList[0];
  49. }
  50. }
  51. private void Button_clear_Click(object sender, EventArgs e)
  52. {
  53. this.handwritingPanel1.Clear(); //清空手写板
  54. }
  55. private void button_Ok_Click(object sender, EventArgs e)
  56. {
  57. this.currentImage = this.handwritingPanel1.GetHandWriting(); //获取手写图片
  58. this.DialogResult = System.Windows.Forms.DialogResult.OK;
  59. }
  60. private void Button_cancel_Click(object sender, EventArgs e)
  61. {
  62. this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
  63. }
  64. }

其运行效果如下图所示:

在vc+开发输入法经常需要gdi技术开发手写功能

end,试着练习一下。

当然也可以在网页上实现手写输入功能,类似于百度在线手写输入。

转载于:https://my.oschina.net/bigfool007139/blog/511753

c#实现简单的手写板功能相关推荐

  1. 实现一个简单的投票功能

    实现一个简单的投票功能 最近项目中需要用到一个投票功能,当时觉得简单,向都没想就动手开始做,没想到走了不少弯路. 后来才发现,是想的太过简单了.来看看改进后的功能. 第一步:数据库设计 两个表:一个主 ...

  2. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  3. nodejs php web,nodejs实现的简单web服务器功能示例

    本文实例讲述了nodejs实现的简单web服务器功能.分享给大家供大家参考,具体如下: 前端js代码: $.ajax({ url:'http://192.168.0.114:3000',//服务器地址 ...

  4. php实现简单验证码的功能

    php实现简单验证码的功能 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta c ...

  5. linux脚本石英钟,原生JS实现的简单小钟表功能示例

    本文实例讲述了原生JS实现的简单小钟表功能.分享给大家供大家参考,具体如下: 先来看看运行效果: 完整代码: www.jb51.net 钟表 body { background-color:#00A2 ...

  6. 基于bootstrap实现简单用户管理功能

    基于bootstrap实现简单用户管理功能,包括增删改以及列表分页展示功能. 1.web.xml配置servlet映射: <servlet><servlet-name>User ...

  7. 验证码实现php 难点,php实现简单的验证码功能

    php实现简单的验证码功能<?php //简单的验证码 //随机数 //为什么要循环0-15之间的数呢? //因为要实现最简单的字母和数字混搭 //十六进制0-9 a-f //dechex -- ...

  8. 一步一步学Silverlight 2系列(5):实现简单的拖放功能

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. powergrep linux版本,PowerShell实现简单的grep功能

    在PowerShell中,无法像*nix中一样使用grep命令,直接对一个目录下的所有文件进行内容查找,下面的PS脚本针对目录和文件进行了区分,借用Select-String命令,实现了内容查找,并显 ...

最新文章

  1. Django(五)模型(model)系统 -- 常用字段和字段参数
  2. 从支付宝看大用户规模互联网架构发展
  3. 基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用
  4. 直播开发项目发展下半场,转战AI直播开启全新模式
  5. java向飞秋发文件_Java 给飞秋发送消息
  6. 无限踩坑系列(8)--猿界神猿
  7. 内存不足:杀死进程还是牺牲子进程
  8. x12arima季节调整方法_深秋是腌洋姜的季节,用老一辈的方法做一坛,比腌萝卜香还爽口...
  9. [jQuery原理] jQuery属性操作相关方法
  10. ASP.NET Core2.2 和2.1 版本中对cookie的设置和存储
  11. java语言简介总结
  12. linux能yum装mcafee吗,Ubuntu安装Mcafee步骤
  13. python求n的倍数_求n以下所有数字的总和,这些数字是某些数字的倍数
  14. laravel 30分站搭建迷你博客
  15. python回车和换行的区别_换行\ n与回车\ r的区别
  16. Mac电脑进入恢复模式详细教程
  17. 2022年第一季度保险服务数字化跟踪分析
  18. win10 下 pdfium编译 VS2017
  19. Lua string.split
  20. 一加5Android8.0刷机包,一加手机1安卓8.0刷机包放出:刷机小王子神话不灭

热门文章

  1. Android学习笔记——关于Intent
  2. android home跳转,Android 中按home键和跳转到主界面的实例代码
  3. 过往已定,未来可期,唯有努力,不负幸运。
  4. linux mplayer 一键安装,在 Linux 中安装 MPlayer
  5. 虚拟内存管理的作用/好处
  6. 基于R语言的seasonal包使用手册_目录_链接(update20220625_10.)
  7. 基于spacedesk的扩展屏的优化
  8. 快速排序(Quick Sort)—挖坑填数法
  9. idea2019导入maven项目中的某些问题
  10. 算法竞赛进阶指南 0x53 区间DP