728x90
728x170
■ InkCanvas 클래스에서 필기를 인식하는 방법을 보여준다.
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="800"
Height="600"
Title="TestProject"
FontFamily="나눔고딕코딩"
FontSize="16">
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Border
Width="300"
Height="300"
BorderThickness="2"
BorderBrush="Black"
Background="White">
<InkCanvas Name="inkCanvas" />
</Border>
<StackPanel
HorizontalAlignment="Center"
Margin="10"
Orientation="Horizontal">
<TextBox Name="resultTextBox"
Width="225"
Height="25"
BorderThickness="1"
BorderBrush="Black"
IsReadOnly="True"
VerticalContentAlignment="Center" />
<Button Name="recognizeButton"
Margin="10 0 0 0"
Width="100"
Height="30"
Content="인식하기" />
</StackPanel>
<Button x:Name="clearCanvasButton"
Width="150"
Height="30"
Content="캐버스 지우기" />
</StackPanel>
</Window>
▶ MainWindow.xaml.cs
using System.IO;
using System.Windows;
using Microsoft.Ink;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
this.recognizeButton.Click += recognizeButton_Click;
this.clearCanvasButton.Click += clearCanvasButton_Click;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 인식하기 버튼 클릭시 처리하기 - recognizeButton_Click(sender, e)
/// <summary>
/// 인식하기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void recognizeButton_Click(object sender, RoutedEventArgs e)
{
using(MemoryStream stream = new MemoryStream())
{
this.inkCanvas.Strokes.Save(stream);
Ink ink = new Ink();
ink.Load(stream.ToArray());
using(RecognizerContext context = new RecognizerContext())
{
if(ink.Strokes.Count > 0)
{
context.Strokes = ink.Strokes;
RecognitionStatus status;
RecognitionResult result = context.Recognize(out status);
if(status == RecognitionStatus.NoError)
{
this.resultTextBox.Text = result.TopString;
}
else
{
MessageBox.Show("글자 인식을 실패했습니다.");
}
}
else
{
MessageBox.Show("글자 획을 발견할 수 없습니다.");
}
}
}
}
#endregion
#region 캔버스 지우기 버튼 클릭시 처리하기 - clearCanvasButton_Click(sender, e)
/// <summary>
/// 캔버스 지우기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void clearCanvasButton_Click(object sender, RoutedEventArgs e)
{
this.inkCanvas.Strokes.Clear();
this.resultTextBox.Text = null;
}
#endregion
}
}
※ C:\Program Files\Common Files\microsoft shared\ink\Microsoft.Ink.dll 파일을 참조한다.
728x90
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] UIElement 클래스 : 잉크 입력 컨트롤에서 잉크 선택하기 (0) | 2022.11.26 |
---|---|
[C#/WPF] UIElement 클래스 : 잉크 입력 컨트롤 만들기 (0) | 2022.11.26 |
[C#/WPF] InkCanvas 클래스 : StylusPlugIns 속성을 사용해 커스텀 스타일러스 플러그인 설정하기 (0) | 2022.11.26 |
[C#/WPF] InkCanvas 클래스 : 커스텀 렌더링 잉크 사용하기 (0) | 2022.11.26 |
[C#/WPF] InkCanvas 클래스 : ISF(Ink Serialized Format) 파일 로드하기/저장하기 (0) | 2022.11.25 |
[C#/WPF] InkCanvas 클래스 : GetSelectedStrokes 메소드를 사용해 선택 스트로크 색상 변경하기 (0) | 2022.11.22 |
[C#/WPF] InkCanvas 클래스 : DefaultDrawingAttributes 속성을 사용해 스트로크 모양 설정하기 (0) | 2022.11.22 |
[C#/WPF] InkCanvas 클래스 : MouseRightButtonUp 이벤트를 사용해 스트로크 크기 확대하기 (0) | 2022.11.22 |
[C#/WPF] Matrix 구조체 : Scale 메소드를 사용해 크기 확대하기 (0) | 2022.11.22 |
[C#/WPF] InkCanvas 엘리먼트 : Background 속성을 사용해 배경 브러시 설정하기 (0) | 2022.11.22 |