Way back on primary school (1963) my teacher tried to learn me to write. First with a pencil, later with a pen. It never was a big success, over the years I always had insufficient marks and nobody (including myself) could usually read what I had written down. Which made me a very early adopter for typewriters and later PC's with word-processors. Now, many years, cool keyboards and monster mice later I'm returning to the pen. That is, the tablet PC pen. Writing with a pen is far more comfortable and is a relief when your hands and wrists are sore of typing. And the tablet PC's handwriting does something most human had given up on: it does understand what I try to write down.
Handwriting recognition is integrated in every corner of the OS but imho it is only implemented right in one place: in the text input panel. While you scribble the input panel shows the recognition results in the tooltips. This is a tremendous feedback. When you seen something is not recognized as the intended word you can correct it on the fly in the scribbling. No need to erase anything, just scribble over the letters misunderstood. Just like you would do with pen and paper.

When you do a text recognition in a tool like Windows Journal an all text dialog will pop up and there is no longer the possibility to pen-correct your scribbling. I find that far less productive.

The basics of text recognition on the fly is not that difficult. to implement in your own tablet apps. The ink in a tablet is modeled in a collection of Stroke objects. An ink aware control has an Ink property which has a Strokes collection. The Strokes collection has an overriden ToString method which will recognize the strokes. (See this article for an introduction to the Tablet API). When a stroke is added the control fires an OnStroke event. In the eventhandler you can do the recognition and present the result.
This demo application has an Inkpicture control and a label. The onStroke event is a one-liner.
private void inkPicture1_Stroke(object sender, Microsoft.Ink.InkCollectorStrokeEventArgs e)
{
label1.Text = inkPicture1.Ink.Strokes.ToString();
}
Now this app has the basic feedback functionality.

Text recognition is expensive. What you will see is that the writing will lag behind as the text starts exceeding something like 10 words. After that you have to accept the recognized text and clear the picture or start using a more sophisticated algorithm.
Peter
Posted
Wed, Dec 15 2004 11:59 AM
by
pvanooijen