private async void InkPresenter_StrokesCollected(InkPresenter sender, InkStrokesCollectedEventArgs args) { try { IReadOnlyList <InkStroke> currentStrokes = Gana.InkPresenter.StrokeContainer.GetStrokes(); if (currentStrokes.Count > 0) { var recognitionResults = await inkRecognizerContainer.RecognizeAsync(Gana.InkPresenter.StrokeContainer, InkRecognitionTarget.All); if (recognitionResults.Count > 0) { // Display recognition result string str = ""; foreach (var r in recognitionResults) { str += r.GetTextCandidates()[0]; } CheckCharacter(str, false, currentStrokes.Count); } } }catch (Exception) { Gana.InkPresenter.StrokeContainer.Clear(); } }
private async void Reco_Click(object sender, RoutedEventArgs e) { if (inkCanvas.InkPresenter.StrokeContainer.GetStrokes().Count > 0) { var recognizer = new InkRecognizerContainer(); var recognitionResults = await recognizer.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); string result = ""; //justACanvas.Children.Clear(); if (recognitionResults.Count > 0) { foreach (var r in recognitionResults) { var candidates = r.GetTextCandidates(); result += " " + candidates[0]; //var rect = r.BoundingRect; //var text = new TextBlock(); //text.Text = candidates[0]; //justACanvas.Children.Add(text); //Canvas.SetTop(text, rect.Bottom + 5); //Canvas.SetLeft(text, rect.Left); } } else { result = "NO TEXT RECOGNIZED!"; } recoResult.Text = result; } }
private async void Recognizer_OnClick(object sender, RoutedEventArgs e) { //手写识别 var container = new InkRecognizerContainer(); //使用墨迹识别 var result = await container.RecognizeAsync(ink.InkPresenter.StrokeContainer, InkRecognitionTarget.All); //获取识别结果 InkRecognitionResult 对象中还能获取候选字 string str = ""; foreach (var temp in result) { for (int i = 0; i < temp.GetTextCandidates().Count; i++) { str += temp.GetTextCandidates()[i]; } } await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Text.Text = str; }); }
private async Task RecognizeAsync() { var currentStrokes = InkCanvas.InkPresenter.StrokeContainer.GetStrokes(); if (currentStrokes.Count > 0) { var recognitionResults = await _inkRecognizerContainer.RecognizeAsync(InkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); var str = string.Empty; if (recognitionResults.Count > 0) { try { str = recognitionResults.Aggregate(string.Empty, (current, r) => current + (" " + r.GetTextCandidates()[0])); var expressionParser = new ExpressionParser(str); ResulTextBlock.Text = expressionParser.Value; } catch (Exception exception) { ResulTextBlock.Text = "Error in " + str; } } else { } } else { } }
private async void RecognizeText() { IReadOnlyList <InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); InkRecognizerContainer inkRecognizerContainer = new InkRecognizerContainer(); if (currentStrokes.Count > 0) { var recognitionResults = await inkRecognizerContainer.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); if (recognitionResults.Count > 0) { // Display recognition result string str = ""; foreach (var r in recognitionResults) { str = str + " " + r.GetTextCandidates()[0]; } txtrecognitionResult.Document.SetText(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, string.IsNullOrEmpty(str) ? string.Empty : str); } else { txtrecognitionResult.Document.SetText(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, "No text recognized."); } string txt; txtrecognitionResult.Document.GetText(Windows.UI.Text.TextGetOptions.UseCrlf, out txt); dynamicNotes = dynamicNotes + " " + txt; } else { txtrecognitionResult.Document.SetText(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, "Must first write something."); } }
private async void Reco_Click(object sender, RoutedEventArgs e) { if (inkCanvas.InkPresenter.StrokeContainer.GetStrokes().Count > 0) { var recognizer = new InkRecognizerContainer(); var recognitionResults = await recognizer.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); string result = ""; if (recognitionResults.Count > 0) { foreach (var r in recognitionResults) { var candidates = r.GetTextCandidates(); result += " " + candidates[0]; } } else { result = "NO TEXT RECOGNIZED!"; } recoResult.Text = result; } }
private async Task RecognizeInkerText() { var inkRecognizer = new InkRecognizerContainer(); var recognitionResults = await inkRecognizer.RecognizeAsync(Inker.InkPresenter.StrokeContainer, InkRecognitionTarget.All); List <TextBox> boxes = new List <TextBox>(); foreach (var result in recognitionResults) { List <UIElement> elements = new List <UIElement>( VisualTreeHelper.FindElementsInHostCoordinates( new Rect(new Point(result.BoundingRect.X, result.BoundingRect.Y), new Size(result.BoundingRect.Width, result.BoundingRect.Height)), this)); TextBox box = elements.Where(el => el is TextBox && (el as TextBox).IsEnabled).FirstOrDefault() as TextBox; if (box != null) { if (!boxes.Contains(box)) { boxes.Add(box); box.Text = ""; } box.Text += " " + result.GetTextCandidates().FirstOrDefault().Trim(); } } Inker.InkPresenter.StrokeContainer.Clear(); }
private async Task RecognizeInkerText() { System.Diagnostics.Debug.WriteLine("RecognizeInkerText"); try { var inkRecognizer = new InkRecognizerContainer(); var recognitionResults = await inkRecognizer.RecognizeAsync(inker.InkPresenter.StrokeContainer, InkRecognitionTarget.All); List <TextBox> textBoxes = new List <TextBox>(); string value = string.Empty; foreach (var result in recognitionResults) { if (TargetTextControl == null) { Point p = new Point(result.BoundingRect.X, result.BoundingRect.Y); Size s = new Size(result.BoundingRect.Width, result.BoundingRect.Height); Rect r = new Rect(p, s); var elements = VisualTreeHelper.FindElementsInHostCoordinates(r, contentPresenter); TextBox box = elements.Where(el => el is TextBox && (el as TextBox).IsEnabled).FirstOrDefault() as TextBox; if (box != null) { if (!textBoxes.Contains(box)) { textBoxes.Add(box); box.Text = ""; } if (string.IsNullOrEmpty(box.Text) == false) { box.Text += " "; } box.Text += result.GetTextCandidates().FirstOrDefault().Trim(); } } else { if (string.IsNullOrEmpty(value) == false) { value += " "; } value += result.GetTextCandidates().FirstOrDefault().Trim(); } } if (TargetTextControl != null) { var type = TargetTextControl.GetType(); PropertyInfo pInfo = type.GetProperty(TEXT_PROPERTY_NAME); pInfo.SetValue(TargetTextControl, value); } inker.InkPresenter.StrokeContainer.Clear(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } }
private async void Recognize(object sender, EventArgs e) { if (Ink != null) { string str = string.Empty; IReadOnlyList <InkStroke> currentStrokes = Ink.InkPresenter.StrokeContainer.GetStrokes(); if (currentStrokes.Count > 0) { try { var inkRecognizerContainer = new InkRecognizerContainer(); var recognitionResults = await inkRecognizerContainer.RecognizeAsync(Ink.InkPresenter.StrokeContainer, InkRecognitionTarget.All); if (recognitionResults.Count > 0) { foreach (var r in recognitionResults) { str += r.GetTextCandidates()[0]; } } } catch (Exception ex) { Debug.WriteLine(ex.Message); } } if (_vm != null) { _vm.RecognizeResult(str); } } }
private async void InkRecoDialog_Opened(ContentDialog sender, ContentDialogOpenedEventArgs args) { // Insert the M2_OnRecognize snippet here var currentStrokes = NotesInkCanvas.InkPresenter.StrokeContainer.GetStrokes(); if (currentStrokes.Count > 0) { var recognitionResults = await _inkRecognizerContainer.RecognizeAsync( NotesInkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); if (recognitionResults.Count > 0) { // Display recognition result var str = string.Empty; foreach (var r in recognitionResults) { str += $"{r.GetTextCandidates()[0]} "; } Status.Text = str; InkRecoDialog.IsPrimaryButtonEnabled = true; } else { Status.Text = "No text recognized."; } } else { Status.Text = "Must first write something."; } }
/// <summary> /// Recognizes the inker text. /// </summary> /// <returns></returns> private async Task RecognizeInkerText() { try { InkRecognizerContainer inkRecognizer = new InkRecognizerContainer(); IReadOnlyList <InkRecognitionResult> recognitionResults = await inkRecognizer.RecognizeAsync(this.inker.InkPresenter.StrokeContainer, InkRecognitionTarget.All); string value = string.Empty; foreach (var result in recognitionResults) { Point p = new Point(result.BoundingRect.X, result.BoundingRect.Y); Size s = new Size(result.BoundingRect.Width, result.BoundingRect.Height); Rect r = new Rect(p, s); GeneralTransform gt = this.TransformToVisual(Window.Current.Content); var r2 = gt.TransformBounds(r); var elements = VisualTreeHelper.FindElementsInHostCoordinates(r2, (UIElement)this.Content, true); TextBox box = elements.FirstOrDefault(el => el is TextBox && (el as TextBox).IsEnabled) as TextBox; if (box != null) { box.Text += result.GetTextCandidates().FirstOrDefault().Trim() + " "; } } this.inker.InkPresenter.StrokeContainer.Clear(); } catch { } }
async void OnRecognizeAsync(object sender, Windows.UI.Xaml.RoutedEventArgs e) { IReadOnlyList <InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); if (currentStrokes.Count > 0) { try { var recognitionResults = await inkRecognizerContainer.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); if (recognitionResults.Count > 0) { // Display recognition result String str = "Recognition result:"; foreach (var r in recognitionResults) { str += " " + r.GetTextCandidates()[0]; } rootPage.NotifyUser(str, SDKTemplate.NotifyType.StatusMessage); } else { rootPage.NotifyUser("No text recognized", SDKTemplate.NotifyType.StatusMessage); } } catch (Exception ex) { rootPage.NotifyUser("Recognize operation failed: " + ex.Message, NotifyType.ErrorMessage); } } }
private async void OnRecognizeText(object sender, RoutedEventArgs e) { int resultsNumber = 0; InkRecognizerContainer inkRecognizer = new InkRecognizerContainer(); var recognitionResults = await inkRecognizer.RecognizeAsync(Canvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); string str = string.Empty; foreach (InkRecognitionResult result in recognitionResults) { // Get all recognition candidates from each recognition result. IReadOnlyList <string> candidates = result.GetTextCandidates(); resultsNumber = candidates.Count; foreach (string candidate in candidates) { str += $"{candidate} | "; } } StringBuilder builder = new StringBuilder(); builder.AppendLine($"Number of recognized words: {resultsNumber}"); builder.AppendLine("Recognized text:"); builder.AppendLine(str); MessageDialog dialog = new MessageDialog(str); await dialog.ShowAsync(); }
private async void btnRecognize_Click(object sender, RoutedEventArgs e) { // Get all strokes on the InkCanvas. IReadOnlyList <InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); // Ensure an ink stroke is present. if (currentStrokes.Count > 0) { // Create a manager for the InkRecognizer object // used in handwriting recognition. InkRecognizerContainer inkRecognizerContainer = new InkRecognizerContainer(); // inkRecognizerContainer is null if a recognition engine is not available. if (!(inkRecognizerContainer == null)) { // Recognize all ink strokes on the ink canvas. IReadOnlyList <InkRecognitionResult> recognitionResults = await inkRecognizerContainer.RecognizeAsync( inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); // Process and display the recognition results. if (recognitionResults.Count > 0) { string str = string.Empty; // Iterate through the recognition results. foreach (var result in recognitionResults) { // Get all recognition candidates from each recognition result. IReadOnlyList <string> candidates = result.GetTextCandidates(); //str += "Candidates: " + candidates.Count.ToString() + "\n"; str = candidates.FirstOrDefault(); } // Display the recognition candidates. //txtrecognitionResult.Text = str; txtrecognitionResult.Document.SetText(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, string.IsNullOrEmpty(str) ? string.Empty : str); allNotes += str; //// Clear the ink canvas once recognition is complete. //inkCanvas.InkPresenter.StrokeContainer.Clear(); } else { txtrecognitionResult.Document.SetText(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, "No recognition results."); } } else { Windows.UI.Popups.MessageDialog messageDialog = new Windows.UI.Popups.MessageDialog("You must install handwriting recognition engine."); await messageDialog.ShowAsync(); } } else { txtrecognitionResult.Document.SetText(Windows.UI.Text.TextSetOptions.ApplyRtfDocumentDefaults, "No ink strokes to recognize."); } }
private async void RecognizeHandwritingButton_OnClick(object sender, RoutedEventArgs e) { // Get all strokes on the InkCanvas. var currentStrokes = NameInkCanvas.InkPresenter.StrokeContainer.GetStrokes(); // Ensure an ink stroke is present. if (currentStrokes.Count < 1) { await new MessageDialog("You have not written anything in the canvas area").ShowAsync(); return; } // Create a manager for the InkRecognizer object used in handwriting recognition. var inkRecognizerContainer = new InkRecognizerContainer(); // inkRecognizerContainer is null if a recognition engine is not available. if (inkRecognizerContainer == null) { await new MessageDialog("You must install handwriting recognition engine.").ShowAsync(); return; } // Recognize all ink strokes on the ink canvas. var recognitionResults = await inkRecognizerContainer.RecognizeAsync( NameInkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); // Process and display the recognition results. if (recognitionResults.Count < 1) { await new MessageDialog("No recognition results.").ShowAsync(); return; } var str = ""; // Iterate through the recognition results, this will loop once for every word detected foreach (var result in recognitionResults) { // Get all recognition candidates from each recognition result var candidates = result.GetTextCandidates(); // For the purposes of this demo, we'll use the first result var recognizedName = candidates[0]; // Concatenate the results str += recognizedName + " "; } // Display the recognized name PatientNameTextBlock.Text = str.Trim(); // Clear the ink canvas once recognition is complete. NameInkCanvas.InkPresenter.StrokeContainer.Clear(); }
private async void RecognizeButton_Click(object sender, RoutedEventArgs e) { var inkRecognizer = new InkRecognizerContainer(); if (null != inkRecognizer) { var recognitionResults = await inkRecognizer.RecognizeAsync(this.InkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); string recognizedText = string.Join(" ", recognitionResults.Select(i => i.GetTextCandidates()[0])); var messageDialog = new MessageDialog(recognizedText); await messageDialog.ShowAsync(); } }
private async void recognize_Click(object sender, RoutedEventArgs e) { if (inkCanvas.InkPresenter.StrokeContainer.GetStrokes().Count == 0) { return; } InkRecognizerContainer container = new InkRecognizerContainer(); lblMsg.Text = "手写识别器: "; lblMsg.Text += Environment.NewLine; // 获取当前支持的手写识别器列表,如果有多个的话可以通过 SetDefaultRecognizer 方法来指定默认的手写识别器 IReadOnlyList <InkRecognizer> recognizers = container.GetRecognizers(); foreach (InkRecognizer ir in recognizers) { lblMsg.Text += ir.Name; lblMsg.Text += Environment.NewLine; } lblMsg.Text += Environment.NewLine; lblMsg.Text += "识别结果: "; lblMsg.Text += Environment.NewLine; IReadOnlyList <InkRecognitionResult> result = await container.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); foreach (string textCandidate in result[0].GetTextCandidates()) { lblMsg.Text += textCandidate; lblMsg.Text += Environment.NewLine; } // 将识别结果通知给 InkStrokeContainer inkCanvas.InkPresenter.StrokeContainer.UpdateRecognitionResults(result); // 识别结果通知给 InkStrokeContainer 后,被识别的 InkStroke 的 Recognized 将被标记为 true // 如果在识别的时候使用的是 InkRecognitionTarget.All 则所有的 InkStroke 的 Recognized 将被标记为 true // 如果在识别的时候使用的是 InkRecognitionTarget.Selected 则被选中的 InkStroke 的 Recognized 将被标记为 true IReadOnlyList <InkStroke> strokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); foreach (InkStroke stroke in strokes) { Debug.WriteLine("stroke.Recognized: " + stroke.Recognized); } // 这个获取到的就是之前通过 InkStrokeContainer 方式设置的数据 result = inkCanvas.InkPresenter.StrokeContainer.GetRecognitionResults(); }
public static async Task <string> Recognize(this InkCanvas inkCanvas) { var strokes = inkCanvas.InkPresenter.StrokeContainer; if (strokes.GetStrokes().Any()) { var recognizer = new InkRecognizerContainer(); var results = await recognizer.RecognizeAsync(strokes, InkRecognitionTarget.All); var candidates = results.Select(x => x.GetTextCandidates().First()); return(string.Join(" ", candidates)); } else { return(string.Empty); } }
async private void Button_Click(object sender, RoutedEventArgs e) { try { var container = new InkRecognizerContainer(); var recognizers = container.GetRecognizers(); if (recognizers != null && recognizers.Count > 0) { // 以下三行為取得Combobox選擇語系, 並設定語系的辨識引擎 string recognizerName = recognizersCombobox.SelectedItem.ToString(); var recognizer = recognizers.FirstOrDefault((x) => x.Name == recognizerName); if (recognizer != null) { container.SetDefaultRecognizer(recognizer); } } if (inkCanvas.InkPresenter.StrokeContainer != null) { var result = await container.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); string returnText = string.Empty; inkCanvas.InkPresenter.StrokeContainer.Clear(); Candidates.Clear(); foreach (var r in result) { foreach (var c in r.GetTextCandidates()) { Candidates.Add(c); } } listview.Visibility = Visibility.Visible; button.Visibility = Visibility.Collapsed; } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); } //if (result != null) //{ // returnText = result[0].GetTextCandidates()[0]; //} //OnRecognized(returnText); }
async private void Button_Click(object sender, RoutedEventArgs e) { var container = new InkRecognizerContainer(); var recognizers = container.GetRecognizers(); if (recognizers != null && recognizers.Count > 0) { // 以下三行為取得目前的語系, 並設定使用目前語系的辨識引擎 string recognizerName = InkRecognizerHelper.LanguageTagToRecognizerName(CultureInfo.CurrentCulture.Name); var recognizer = recognizers.FirstOrDefault((x) => x.Name == recognizerName); if (recognizer != null) { container.SetDefaultRecognizer(recognizer); } } var result = await container.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); }
async Task OnRecognizeAsync(InkRecognitionTarget target) { // Note that you can interrogate this object for language support but we're // leaving this set to the default. var inkRecognizerContainer = new InkRecognizerContainer(); // We ask for recognition and we get back a 'list' of results where // each one of those contains a var recognitionResults = await inkRecognizerContainer.RecognizeAsync( this.inkStrokeContainer, target); // We could just iterate through the recognition results now but, instead, // we update the stroke container with those results so that it will store // them for us. this.inkStrokeContainer.UpdateRecognitionResults(recognitionResults); this.UpdateStrokesView(); }
/// <summary> /// Do some amazing calculations. Store calculation and result in SQL. /// </summary> private async void EqualsButton_Click(object sender, RoutedEventArgs e) { if (MyInkCanvas.InkPresenter.StrokeContainer.GetStrokes().Any()) { var inkRecognizerContainer = new InkRecognizerContainer(); var results = await inkRecognizerContainer.RecognizeAsync(MyInkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); var recognizedText = string.Concat(results.Select(i => i.GetTextCandidates()[0])); ResultsTextBlock.Text = Calculation.NetStandard.Calculator.Calculate(recognizedText).ToString(); MyInkCanvas.InkPresenter.StrokeContainer.Clear(); } else { ResultsTextBlock.Text = Calculation.NetStandard.Calculator.Calculate(ResultsTextBlock.Text).ToString(); } HistoryCollection = new ObservableCollection <string>(CalculationHistory.FetchEntireHistory()); }
async void OnRecognizeAsync(object sender, RoutedEventArgs e) { //Recognize Text IReadOnlyList <InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); if (currentStrokes.Count > 0) { RecognizeBtn.IsEnabled = false; ClearBtn.IsEnabled = false; RecoName.IsEnabled = false; var recognitionResults = await inkRecognizerContainer.RecognizeAsync(inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); if (recognitionResults.Count > 0) { // Display recognition result string str = ""; foreach (var r in recognitionResults) { str += " " + r.GetTextCandidates()[0]; } this.textShow.Text = str; } else { rootPage.ShowMessage("No text recognized."); } RecognizeBtn.IsEnabled = true; ClearBtn.IsEnabled = true; RecoName.IsEnabled = true; } else { rootPage.ShowMessage("Must first write something."); } }
// </SnippetInitializeRecognizerList> // <SnippetRecognize_Click> // Handle button click to initiate recognition. private async void Recognize_Click(object sender, RoutedEventArgs e) { // <SnippetGetStrokes> // Get all strokes on the InkCanvas. IReadOnlyList <InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); // </SnippetGetStrokes> // Ensure an ink stroke is present. if (currentStrokes.Count > 0) { // inkRecognizerContainer is null if a recognition engine is not available. if (!(inkRecognizerContainer == null)) { // <SnippetRecognizeAsync> // Recognize all ink strokes on the ink canvas. IReadOnlyList <InkRecognitionResult> recognitionResults = await inkRecognizerContainer.RecognizeAsync( inkCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); // </SnippetRecognizeAsync> // Process and display the recognition results. if (recognitionResults.Count > 0) { // <SnippetGetTextCandidates> string str = "Recognition result\n"; // Iterate through the recognition results. foreach (InkRecognitionResult result in recognitionResults) { // Get all recognition candidates from each recognition result. IReadOnlyList <string> candidates = result.GetTextCandidates(); str += "Candidates: " + candidates.Count.ToString() + "\n"; foreach (string candidate in candidates) { str += candidate + " "; } } // Display the recognition candidates. recognitionResult.Text = str; // Clear the ink canvas once recognition is complete. inkCanvas.InkPresenter.StrokeContainer.Clear(); // </SnippetGetTextCandidates> } else { recognitionResult.Text = "No recognition results."; } } else { Windows.UI.Popups.MessageDialog messageDialog = new Windows.UI.Popups.MessageDialog( "You must install handwriting recognition engine."); await messageDialog.ShowAsync(); } } else { recognitionResult.Text = "No ink strokes to recognize."; } }
private async Task RecognizeInkerText() { try { var inkRecognizer = new InkRecognizerContainer(); var recognitionResults = await inkRecognizer.RecognizeAsync(_inker.InkPresenter.StrokeContainer, InkRecognitionTarget.All); List <TextBox> boxes = new List <TextBox>(); var ttv = _contentPresenter.TransformToVisual(Window.Current.Content); Point offsetCoords = ttv.TransformPoint(new Point(0, 0)); foreach (var result in recognitionResults) { List <UIElement> elements = new List <UIElement>( VisualTreeHelper.FindElementsInHostCoordinates( new Rect( new Point( result.BoundingRect.X + offsetCoords.X, result.BoundingRect.Y + offsetCoords.Y), new Size(result.BoundingRect.Width, result.BoundingRect.Height)), _contentPresenter)); // find one with overlap var textBoxes = elements.Where(el => el is TextBox && (el as TextBox).IsEnabled); var maxOverlapArea = 0d; TextBox box = null; foreach (var textBox in textBoxes) { var bounds = textBox.TransformToVisual(_contentPresenter).TransformBounds(new Rect(0, 0, textBox.RenderSize.Width, textBox.RenderSize.Height)); var xOverlap = Math.Max(0, Math.Min(result.BoundingRect.Right, bounds.Right) - Math.Max(result.BoundingRect.Left, bounds.Left)); var yOverlap = Math.Max(0, Math.Min(result.BoundingRect.Bottom, bounds.Bottom) - Math.Max(result.BoundingRect.Top, bounds.Top)); var overlapArea = xOverlap * yOverlap; if (overlapArea > maxOverlapArea) { maxOverlapArea = overlapArea; box = textBox as TextBox; } } //TextBox box = elements.Where(el => el is TextBox && (el as TextBox).IsEnabled).FirstOrDefault() as TextBox; if (box != null) { var text = result.GetTextCandidates().FirstOrDefault().Trim(); if (!boxes.Contains(box)) { boxes.Add(box); box.Text = text; } else { box.Text += " " + text; } } } } catch (Exception ex) { if (Debugger.IsAttached) { Debugger.Break(); } } finally { _inker.InkPresenter.StrokeContainer.Clear(); } }
private async Task ConstrainedHandWriting() { // Get all strokes on the InkCanvas. IReadOnlyList <InkStroke> currentStrokes = InputCanvas.InkPresenter.StrokeContainer.GetStrokes(); // Ensure an ink stroke is present. if (currentStrokes.Count > 0) { // Create a manager for the InkRecognizer object // used in handwriting recognition. InkRecognizerContainer inkRecognizerContainer = new InkRecognizerContainer(); // inkRecognizerContainer is null if a recognition engine is not available. if (!(inkRecognizerContainer == null)) { // Recognize all ink strokes on the ink canvas. IReadOnlyList <InkRecognitionResult> recognitionResults = await inkRecognizerContainer.RecognizeAsync( InputCanvas.InkPresenter.StrokeContainer, InkRecognitionTarget.All); // Process and display the recognition results. if (recognitionResults.Count > 0) { string str = ""; // Iterate through the recognition results. foreach (var result in recognitionResults) { // Get all recognition candidates from each recognition result. IReadOnlyList <string> candidates = result.GetTextCandidates(); //str += "Candidates: " + candidates.Count.ToString() + "\n"; foreach (string candidate in candidates) { str += candidate + " "; break; //get first one } } // Display the recognition candidates. //var selectionIndex = recognitionResult.SelectionStart; //recognitionResult.Text = recognitionResult.Text.Insert(selectionIndex, str); //recognitionResult.SelectionStart = selectionIndex + str.Length; Notes = recognitionResult.Text = str; // Clear the ink canvas once recognition is complete. InputCanvas.InkPresenter.StrokeContainer.Clear(); OnStringChanged(Notes); ; } else { recognitionResult.Text = "No recognition results."; } } else { Windows.UI.Popups.MessageDialog messageDialog = new Windows.UI.Popups.MessageDialog("You must install handwriting recognition engine."); await messageDialog.ShowAsync(); } } else { // recognitionResult.Text = "No ink strokes to recognize."; } }