这里要介绍的是通过InkAnalyzer来实现简单图形的识别,例如圆,椭圆,正方形,三角形等,当然你也可以通过扩展来实现自定义图形的识别,在使用InkAnalyzer前,你需要引用IAWinFX.dll才能保证InkAnalyzer正常的工作.

ps:通过InkAnalyzer实现简单的图形的识别,并不是什么很高深的技术,除了InkANalyzer你也可以通过现有的一些算法来实现笔迹到图形的识别转换,只是我们工作在window平台下,使用的是Net技术,所以没有重复造轮子的必要了,这篇文章其实是Drawtool工具的中一个小功能就是图形识别笔了。对于drawtool来说除了需要具备画笔,荧光笔,flash笔,排笔,纹理笔等外还需要一个图形识别笔的支持.

代码相对简单,相关类的使用可以参考msdn,这是你最好的伙伴了.

对于自定义的图形的识别,你可以在_internalAnalyzer函数中,当drawingNode.GetShapeName返回的名称为other时候,然后根据笔迹进行分析,其实就是点分析算法的应用了

    /// <summary>
/// 图形识别类
/// </summary>
public class ShapeRecogniser
{
public InkAnalyzer _inkAnalyzer = null; private ShapeRecogniser()
{
this._inkAnalyzer = new InkAnalyzer
{
AnalysisModes = AnalysisModes.AutomaticReconciliationEnabled
};
} /// <summary>
/// 根据笔迹集合返回图形名称字符串
/// </summary>
/// <param name="strokeCollection"></param>
/// <returns></returns>
public string Recognition(StrokeCollection strokeCollection)
{
if (strokeCollection == null)
{
MessageBox.Show("dddddd");
return null;
} string result = null;
try
{
this._inkAnalyzer.AddStrokes(strokeCollection);
if (this._inkAnalyzer.Analyze().Successful)
{
result = _internalAnalyzer(this._inkAnalyzer);
this._inkAnalyzer.RemoveStrokes(strokeCollection);
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
} return result;
} /// <summary>
/// 实现笔迹的分析,返回图形对应的字符串
/// 你在实际的应用中根据返回的字符串来生成对应的Shape
/// </summary>
/// <param name="ink"></param>
/// <returns></returns>
private string _internalAnalyzer(InkAnalyzer ink)
{
try
{
ContextNodeCollection nodecollections = ink.FindNodesOfType(ContextNodeType.InkDrawing);
foreach (ContextNode node in nodecollections)
{
InkDrawingNode drawingNode = node as InkDrawingNode;
if (drawingNode != null)
{
return drawingNode.GetShapeName();
}
}
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
} return null;
} private static ShapeRecogniser instance = null;
public static ShapeRecogniser Instance
{
get
{
return instance == null ? (instance = new ShapeRecogniser()) : instance;
}
}
}

应用其实很简单的,你可以在你任何程序上添加一个InkCanvas,然后在鼠标up或者其你觉得适合地方通过调用ShapeRecogniser的Recognition方法,然后根据返回的图形的名称生成对应的shape

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DrawTool多重笔之前奏 => 通过InkAnalyzer实现图形识别的更多相关文章

  1. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  2. ASP.Net请求处理机制初步探索之旅 - Part 1 前奏

    开篇:ASP.Net是一项动态网页开发技术,在历史发展的长河中WebForm曾一时成为了ASP.Net的代名词,而ASP.Net MVC的出现让这项技术更加唤发朝气.但是,不管是ASP.Net Web ...

  3. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  4. JavaScript设计模式——前奏(封装和信息隐藏)

    前面一篇讲了js设计模式的前奏,包括接口的讲解.. 三:封装和信息隐藏: 信息隐藏用来进行解耦,定义一些私有的数据和方法. 封装是用来实现信息隐藏的技术,通过闭包实现私有数据的定义和使用. 接口在这其 ...

  5. Objective-C专题,是学习iOS开发的前奏(转)

    第一个OC的类 来源:http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html 本文目录 一.语法简介 二.用Xcode创建第一个OC的 ...

  6. DrawTool画笔之图形笔

    相关知识参考DrawTool画笔之纹理笔  , 图形笔的实现跟纹理笔的实现是一样的,重载Stroke的DrawCore方法,效果图: --------------------------------- ...

  7. 企业DC Windows运维监控规范及C辅助监控开发实战前奏;

    春天来了,小草发芽了,花儿开了,你还在等什么? 人家都自驾游了,ruiy可还是徒步游的,并且还留着汗+油; 什么是生活,我的理解就是跟着gd生,跟着gd活,可是讲到这我又自恋了,人家开二会也没想起我来 ...

  8. ASP.Net请求处理机制初步探索之旅 - Part 1 前奏(转)

        在读本文之前建议先阅读IIS架构:http://www.cnblogs.com/tiantianle/p/5079932.html     不管是ASP.Net WebForm还是ASP.Ne ...

  9. 设计模式之前奏(UML类图)

    原文:设计模式之前奏(UML类图) 本人菜菜一个,最近一直在博客园游走闲逛,看到了各种技术,各种各种…….便看到了大话设计模式这本书,下了电子版的看了看第一章,感觉相当不错,不仅通俗易懂,而且与实际案 ...

随机推荐

  1. university, school, college, department, institute的区别

    这些个词没有太大区别,有时候有些词是可以通用的,而有些用法则是随着地域时间的不同而变迁. 一般说来,college译作“学院”,它是university (综合性大学)的一个组成部分,例如,一所综合大 ...

  2. jQuery datepicker

    <script type="text/javascript" src="/assets/datepicker/jquery-ui-1.9.1.min.js" ...

  3. CSS3之选择器

    总结了下CSS3新增的一些选择器. CSS3的选择器有基本选择器.属性选择器.伪类选择器几类. CSS3选择器 选择器 举例 例子描述 element1~element2 p~a 选择前面有 < ...

  4. 简化对象extend拓展

    发现对对象继承或拷贝的时候,总是要$点来点去好麻烦,我的解决办法如下: (function(){ Object.prototype.extend = function(o){ $.extend(tru ...

  5. 正斜杠和反斜杠-windows、web、c语言大讨论

    首先,在c语言中,正斜杠/ slash 表示除法反斜杠\ backslash ,\用于转义字符,\n.\0. 其次,UNIX 操作系统设计了这种路径分隔法,它使用正斜杠:/.由于网络是首先应用在 UN ...

  6. 代码轮子之很简单但是挺管用的基于C# Task的模拟并发的代码

    代码轮子之很简单但是挺管用的基于C# Task的模拟并发的代码

  7. SWFUpload使用指南

    SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大. SWFUpload的特点: 1.用flash进行上传,页面无刷新,且可自定义Flash按钮的样式; 2.可以在浏览器 ...

  8. Chrome调试(debugger)总是进入paused in debugger状态

    在通过Chrome浏览器进行web前端开发时,我们会经常用到Chrome自带的debugger工具,但是经常按完快捷键(F12)后,页面会进入 paused in debugger状态,需要点击右上角 ...

  9. ASP.NET的SEO:Linq to XML---网站地图和RSS Feed

    本系列目录网站地图的作用是让搜索引擎尽快的,更多的收录网站的各个网页.    这里我们首先要明白一个基本的原理,搜索引擎的爬行方式.整个互联网就像一张纵横交错的"网":网的各个节点 ...

  10. hdu1171

    use fmax().-------TLE #define mmax(a,b) (a)>(b)?(a):(b);   ---796ms that's it! #include <stdio ...