DrawTool 다 중 펜 의 전주 = > InkAnalyzer 를 통 해 도형 인식 실현

7718 단어 tool
여기 서 소개 하고 자 하 는 것 은 InkAnalyzer 를 통 해 간단 한 도형 인식 을 실현 하 는 것 입 니 다. 예 를 들 어 원, 타원, 정사각형, 삼각형 등 입 니 다. 물론 확장 을 통 해 사용자 정의 도형 인식 을 실현 할 수 있 습 니 다. InkAnalyzer 를 사용 하기 전에 IAWinFX. dll 을 참조 해 야 InkAnalyzer 의 정상 적 인 작업 을 보장 할 수 있 습 니 다.
ps: InkAnalyzer 를 통 해 간단 한 도형 인식 을 실현 하 는 것 은 그리 깊 은 기술 이 아 닙 니 다. InkANalyzer 를 제외 하고 기 존의 알고리즘 을 통 해 필적 에서 도형 으로 의 식별 전환 을 실현 할 수 있 습 니 다. 다만 우 리 는 window 플랫폼 에서 일 할 때 Net 기술 을 사용 하여 바퀴 를 중복 만 들 필요 가 없습니다.이 글 은 사실 Drawtool 도구 의 작은 기능 중 하나 가 바로 도형 인식 펜 이다.drawtool 의 경우 붓, 형광 펜, 플래시 펜, 붓, 무늬 펜 등 을 갖 춰 야 할 뿐만 아니 라 도형 인식 펜 의 지원 도 필요 하 다.
코드 가 상대 적 으로 간단 합 니 다. 관련 유형의 사용 은 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 이나 적당 하 다 고 생각 하 는 곳 에서 Shape Recogniser 의 Recognition 방법 을 호출 한 다음 돌아 오 는 도형 의 이름 에 따라 해당 하 는 shape 를 생 성 할 수 있 습 니 다.
 
 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

좋은 웹페이지 즐겨찾기