次の方法で共有


RecognitionAlternate.Midline プロパティ

単一行のテキストを表す RecognitionAlternate オブジェクトの中線を取得します。

名前空間 :  Microsoft.Ink
アセンブリ :  Microsoft.Ink (Microsoft.Ink.dll 内)

構文

'宣言
Public ReadOnly Property Midline As Line
'使用
Dim instance As RecognitionAlternate
Dim value As Line

value = instance.Midline
public Line Midline { get; }
public:
property Line Midline {
    Line get ();
}
/** @property */
public Line get_Midline()
public function get Midline () : Line

プロパティ値

型 : Microsoft.Ink.Line
単一行のテキストを表す RecognitionAlternate オブジェクトの中線。

解説

中線は、アセンダを除く、文字本体の最上部が揃えられる架空の横線に対応します。中線は最上部にも対応します。

ms572004.alert_note(ja-jp,VS.90).gifメモ :

認識代替候補が 1 行のテキスト内で複数の認識セグメントに及んでいる場合、このプロパティは代替候補のベースラインと並列な行を返します。ベースラインの上にある中線の距離は、最初のセグメント内の対応する距離によって決定されます。

g パラメータを RecognitionProperty.Segmentation グローバル一意識別子 (GUID) に設定した AlternatesWithConstantPropertyValues メソッドを使用して、元の代替候補の区切りに対応する 1 つのセグメントの認識代替候補のコレクションを取得します。

ms572004.alert_note(ja-jp,VS.90).gifメモ :

認識代替候補が複数行に及ぶ場合、このプロパティは COMException 例外をスローします。LineAlternates プロパティを使用して、複数行の認識代替候補に対応する 1 行の認識代替候補のコレクションを取得します。

この C# の例では、ListBox コントロール theListBox、2 つの Button コントロール theRecognizeButton、および theGetDataButton が追加されているフォーム RecognitionResultForm のイベント ハンドラを定義します。サンプルでは、InkCollectortheInkCollector、RecognizerContexttheRecognizerContext、および RecognitionResulttheRecognitionResult も定義します。これらはインクの収集と認識の実行に使用されます。

theRecognizeButton のクリック イベントのイベント ハンドラは、インク コレクタのストロークに対して認識を実行し、最上位の代替候補の認識結果に関する情報を theListBox に設定します。

theGetDataButton のクリック イベントのイベント ハンドラは、最上位の代替候補の行代替候補コレクションを取得します。次に、ハンドラは各行代替候補のアセンダ ライン、中線、ベースライン、およびデセンダ ラインを描画します。ハンドラは、行番号と各行代替候補の信頼性レベルに関する情報も theListBox に設定します。

[C#]

// Declare ink elements and create pens.
Microsoft.Ink.InkCollector theInkCollector;
Microsoft.Ink.RecognizerContext theRecognizerContext;
Microsoft.Ink.RecognitionResult theRecognitionResult;

System.Drawing.Pen thePen1 = new Pen(Color.Red);
System.Drawing.Pen thePen2 = new Pen(Color.Orange);
System.Drawing.Pen thePen3 = new Pen(Color.Yellow);
System.Drawing.Pen thePen4 = new Pen(Color.Green);

// Event handler for the form's Load event.
private void RecognitionResultForm_Load(object sender, System.EventArgs e)
{
    // Create the ink collector.
    this.theInkCollector = new Microsoft.Ink.InkCollector(this.Handle);
    this.theInkCollector.Enabled = true;

    // Create the default recognizer context.
    this.theRecognizerContext = new Microsoft.Ink.RecognizerContext();
}

// Event handler for the "Recognize" button's Click event.
private void theRecognizeButton_Click(object sender, System.EventArgs e)
{
    // Check for ink before performing recognition.
    this.theListBox.Items.Clear();
    if (0 == this.theInkCollector.Ink.Strokes.Count)
    {
        this.theListBox.Items.Add("No ink to recognize.");
        return;
    }

    // Perform recognition on the strokes currently in the ink collector.
    Microsoft.Ink.RecognitionStatus theRecognitionStatus;
    this.theRecognizerContext.Strokes = this.theInkCollector.Ink.Strokes;
    this.theRecognitionResult =
        this.theRecognizerContext.Recognize(out theRecognitionStatus);

    // Display information about the recognition result in the list box.
    this.theListBox.Items.Add("The top alternate is: " +
        this.theRecognitionResult.TopString);
    this.theListBox.Items.Add("The top confidence is: " +
        this.theRecognitionResult.TopConfidence);
    this.theListBox.Items.Add("The number of strokes is:" +
        this.theRecognitionResult.Strokes.Count);
}

// Event handler for the "Get Data" button's Click event.
private void theGetDataButton_Click(object sender, System.EventArgs e)
{
    // Refresh the list box and check for a recognition result.
    this.theListBox.Items.Clear();
    if (null == this.theRecognitionResult)
    {
        this.theListBox.Items.Add("No recognition result available.");
        return;
    }

    // Get the line alternates collection for the top alternate.
    Microsoft.Ink.RecognitionAlternates theLineAlternates =
        this.theRecognitionResult.TopAlternate.LineAlternates;

    using (System.Drawing.Graphics g = this.CreateGraphics())
    {
        // Clear the drawing surface
        g.Clear(this.BackColor);

        // For each line alternate in the collection:
        foreach(Microsoft.Ink.RecognitionAlternate theAlternate
                    in theLineAlternates)
        {
            // Add information about the alternate to the list box.
            this.theListBox.Items.Add("The Line Number is: " +
                theAlternate.LineNumber.ToString());
            this.theListBox.Items.Add("The alternate's text is: " +
                theAlternate.ToString());
            this.theListBox.Items.Add("The number of strokes is: " +
                theAlternate.Strokes.Count);
            this.theListBox.Items.Add("The Confidence is: " +
                theAlternate.Confidence.ToString());

            // Draw the ascender, midline, baseline, and descender.
            DrawLine(g, theAlternate.Ascender, this.thePen1);
            DrawLine(g, theAlternate.Midline, this.thePen2);
            DrawLine(g, theAlternate.Baseline, this.thePen3);
            DrawLine(g, theAlternate.Descender, this.thePen4);

            this.theListBox.Items.Add(string.Empty);
        }

        // Redraw the ink.
        this.theInkCollector.Renderer.Draw(g, this.theRecognitionResult.Strokes);
    }
}

// Event handler for the form's Closed event.
private void RecognitionResultForm_Closed(object sender, System.EventArgs e)
{
    // Free the resources for the ink collector, recognizer context, and pens.
    this.theInkCollector.Dispose();
    this.theInkCollector = null;
    this.theRecognizerContext.Dispose();
    this.theRecognizerContext = null;

    this.thePen1.Dispose();
    this.thePen1 = null;
    this.thePen2.Dispose();
    this.thePen2 = null;
    this.thePen3.Dispose();
    this.thePen3 = null;
    this.thePen4.Dispose();
    this.thePen4 = null;
}

// Helper function to draw the lines.
private void DrawLine(System.Drawing.Graphics g,
    Microsoft.Ink.Line line, System.Drawing.Pen pen)
{
    System.Drawing.Point point1 = line.BeginPoint;
    System.Drawing.Point point2 = line.EndPoint;

    this.theInkCollector.Renderer.InkSpaceToPixel(g, ref point1);
    this.theInkCollector.Renderer.InkSpaceToPixel(g, ref point2);

    g.DrawLine(pen, point1, point2);
}

この Microsoft® Visual Basic® .NET の例では、フォーム RecognitionResultForm のイベント ハンドラを定義します。このフォームには、ListBox コントロール theListBox と、2 つの Button コントロール theRecognizeButton および theGetDataButton が追加されています。また、InkCollectortheInkCollector、RecognizerContexttheRecognizerContext、および RecognitionResulttheRecognitionResult も定義します。これらはインクの収集と認識の実行に使用します。

theRecognizeButton のクリック イベントのイベント ハンドラは、インク コレクタ内のストロークに対して認識を実行し、認識結果の最上位代替候補の関する情報を theListBox に挿入します。

theGetDataButton のクリック イベントのイベント ハンドラは、最上位の代替候補の行代替候補コレクションを取得します。次に、ハンドラは各行代替候補のアセンダ ライン、中線、ベースライン、およびデセンダ ラインを描画します。また、行番号と各行代替候補の信頼性レベルに関する情報を theListBox に挿入します。

[Visual Basic]

    Dim theInkCollector As Microsoft.Ink.InkCollector
    Dim theRecognizerContext As Microsoft.Ink.RecognizerContext
    Dim theRecognitionResult As Microsoft.Ink.RecognitionResult

    Dim thePen1 As System.Drawing.Pen = New Pen(Color.Red)
    Dim thePen2 As System.Drawing.Pen = New Pen(Color.Orange)
    Dim thePen3 As System.Drawing.Pen = New Pen(Color.Yellow)
    Dim thePen4 As System.Drawing.Pen = New Pen(Color.Green)

    ' Event handler for the form's Load event.
    Private Sub RecognitionResultForm_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        ' Create the ink collector.
        Me.theInkCollector = New Microsoft.Ink.InkCollector(Me.Handle)
        Me.theInkCollector.Enabled = True

        ' Create the default recognizer context.
        Me.theRecognizerContext = New Microsoft.Ink.RecognizerContext
    End Sub

    ' Event handler for the "Recognize" button's Click event.
    Private Sub theRecognizeButton_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles theRecognizeButton.Click

        ' Check for ink before performing recognition.
        Me.theListBox.Items.Clear()
        If Me.theInkCollector.Ink.Strokes.Count = 0 Then
            Me.theListBox.Items.Add("No ink to recognize.")
            Return
        End If

        ' Perform recognition on the strokes currently in the ink collector.
        Dim theRecognitionStatus As Microsoft.Ink.RecognitionStatus
        Me.theRecognizerContext.Strokes = Me.theInkCollector.Ink.Strokes
        Me.theRecognitionResult = _
            Me.theRecognizerContext.Recognize(theRecognitionStatus)

        ' Display information about the recognition result in the list box.
        Me.theListBox.Items.Add("The top alternate is: " & _
                                    theRecognitionResult.TopString)
        Me.theListBox.Items.Add("The top confidence is: " & _
                                    theRecognitionResult.TopConfidence.ToString())
        Me.theListBox.Items.Add("The number of strokes is:" & _
                                    theRecognitionResult.Strokes.Count)
    End Sub

    ' Event handler for the "Get Data" button's Click event.
    Private Sub theGetDataButton_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles theGetDataButton.Click

        ' Refresh the list box and check for a recognition result.
        Me.theListBox.Items.Clear()
        If (Me.theRecognitionResult Is Nothing) Then
            Me.theListBox.Items.Add("No recognition result available.")
            Return
        End If

        ' Get the line alternates collection for the top alternate.
        Dim theLineAlternates As Microsoft.Ink.RecognitionAlternates = _
            Me.theRecognitionResult.TopAlternate.LineAlternates()

        ' Create a temporary graphics object.
        Dim g As System.Drawing.Graphics = Me.CreateGraphics()

        ' Clear the drawing surface
        g.Clear(Me.BackColor)

        ' For each line alternate in the collection:
        For Each theAlternate As Microsoft.Ink.RecognitionAlternate _
                    In theLineAlternates

            ' Add information about the alternate to the list box.
            Me.theListBox.Items.Add("The Line Number is: " & _
                theAlternate.LineNumber.ToString())
            Me.theListBox.Items.Add("The alternate's text is: " & _
                theAlternate.ToString())
            Me.theListBox.Items.Add("The number of strokes is: " & _
                theAlternate.Strokes.Count)
            Me.theListBox.Items.Add("The Confidence is: " & _
                theAlternate.Confidence.ToString())

            ' Draw the ascender, midline, baseline, and descender.
            DrawLine(g, theAlternate.Ascender, Me.thePen1)
            DrawLine(g, theAlternate.Midline, Me.thePen2)
            DrawLine(g, theAlternate.Baseline, Me.thePen3)
            DrawLine(g, theAlternate.Descender, Me.thePen4)

            Me.theListBox.Items.Add(String.Empty)
        Next

        ' Redraw the ink.
        Me.theInkCollector.Renderer.Draw(g, Me.theRecognitionResult.Strokes)

        ' Dispose of the graphics object.
        g.Dispose()
    End Sub

    ' Event handler for the form's Closed event.
    Private Sub RecognitionResultForm_Closed(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Closed

        ' Free the resources for the ink collector and recognizer context.
        Me.theInkCollector.Dispose()
        Me.theInkCollector = Nothing
        Me.theRecognizerContext.Dispose()
        Me.theRecognizerContext = Nothing

        Me.thePen1.Dispose()
        Me.thePen1 = Nothing
        Me.thePen2.Dispose()
        Me.thePen2 = Nothing
        Me.thePen3.Dispose()
        Me.thePen3 = Nothing
        Me.thePen4.Dispose()
        Me.thePen4 = Nothing
    End Sub

    ' Helper function to draw the lines.
    Private Sub DrawLine(ByVal g As System.Drawing.Graphics, _
        ByVal line As Microsoft.Ink.Line, ByVal pen As System.Drawing.Pen)

        Dim point1 As System.Drawing.Point = line.BeginPoint
        Dim point2 As System.Drawing.Point = line.EndPoint

        Me.theInkCollector.Renderer.InkSpaceToPixel(g, point1)
        Me.theInkCollector.Renderer.InkSpaceToPixel(g, point2)

        g.DrawLine(pen, point1, point2)
    End Sub

プラットフォーム

Windows Vista

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

バージョン情報

.NET Framework

サポート対象 : 3.0

参照

参照

RecognitionAlternate クラス

RecognitionAlternate メンバ

Microsoft.Ink 名前空間

Line

RecognitionAlternate.AlternatesWithConstantPropertyValues

RecognitionAlternate.LineAlternates

RecognitionAlternate.Ascender

RecognitionAlternate.Baseline

RecognitionAlternate.Descender