This page explains how you can use iink SDK without using iink SDK rendering.

MyScript iink SDK was primarily designed as a graphical-oriented, interactive solution that lets end users easily input and edit their handwriting. With the Editor, interactivity is rendering driven, relying on iink SDK rendering.

Sometimes, however, it makes sense to integrate iink SDK off-screen, without any user interface or with a user interface based on your own rendering, not on iink SDK one.

Non interactive use cases

It may be required to add handwriting recognition capabilities to an existing non-interactive application in batch mode. It might also be useful to process input in incremental mode without displaying the recognition result, for instance to implement an ink search indexing service.

Events (x,y) in pixels Ink capture Input Output exported document(x,y) in mm Renderer Capture device resolution (dpix,dpiy)

Setup

Off-screen setup is very similar to the graphical use case:

  1. Create and configure an engine.
  2. Create a renderer from the engine and pass it a null render target.
  3. Create a package and a content part of the appropriate type to work on.
  4. Create an editor, set its view size and attach a font metrics provider (for most platforms, you can reuse the one coming with the UI Reference Implementation).
  5. Attach the part to the editor.

Common pitfalls

Example

// Configure the engine to disable guides (recommended)
engine.getConfiguration().setBoolean("text.guides.enable", false);

// Create a renderer with a null render target
float dpiX = ...;
float dpiY = ...;
Renderer renderer = engine.createRenderer(dpiX, dpiY, null);

// Create the editor with a default tool controller
Editor editor = engine.createEditor(renderer);

// The editor requires a font metrics provider and a view size *before* calling setPart()
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
Map<String, Typeface> typefaceMap = new HashMap<>();
editor.setFontMetricsProvider(new FontMetricsProvider(displayMetrics, typefaceMap));
editor.setViewSize(640, 480);

// Create a temporary package and part for the editor to work with
ContentPackage package = null;
try
{
  package = engine.createPackage("text.iink");
}
catch (IOException e)
{
  e.printStackTrace();
}

ContentPart part = package.createPart("Text");
editor.setPart(part);

The editor can now be used to process pointer events and export the results.

Offscreen Interactivity use case

Up to iink SDK 2.0, it was necessary to use the iink SDK rendering in order to benefit from iink SDK interactive features. In 2.1, while keeping our classical Editor and its related objects and interfaces, we introduced the Offscreen Interactivity feature based on an OffscreenEditor.

Application iink SDK Strokes Result exports Incremental processing Data model iink model Gesture analyse Gesture notification Capture

This new feature lets the integrator programmatically drive the content model update by keeping the incremental recognition principle and using gesture notifications. The application can rely on its own rendering to manage the captured strokes and display its model. Recognition results are available on demand with dedicated APIs.

Offscreen Interactivity main objects

For the moment, this feature is only available for “Raw Content” parts. It relies on these new objects and interfaces:

Offscreen Interactivity undo/redo

Offscreen Interactivity API and samples

➤ For more details, refer to the API documentation documentation and/or ask question on our developer forum.