zoukankan      html  css  js  c++  java
  • DrawTool多重笔之前奏 => 通过InkAnalyzer实现图形识别

    这里要介绍的是通过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

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

  • 相关阅读:
    Link Maker 为 Apple Music、iTunes Store、App Store、iBooks Store 以及 Mac App Store 创建链接。
    在 CentOS7 上安装 MySQL5.7
    Git关于忽略Xcode工程中UserInterfaceState.xcuserstate文件的问题
    UITableView的frame改变做动画时,如何禁用UITableViewCell内置的动画效果
    Error: You must `brew link pcre openresty-openssl` before homebrew/nginx/openresty can be installed
    resty.upload 处理上传的图片 并把生成的url保存到数据库中
    Lua 计算两个GPS坐标点之间的距离
    Cornerstone安装提示文件已损坏问题
    "xxx was built without full bitcode" 编译错误解决
    iOS 网页打开APP,并且跳转到对应界面
  • 原文地址:https://www.cnblogs.com/andy1987/p/4347228.html
Copyright © 2011-2022 走看看