このページの本文へ

Windows Info 第71回

Windows 10でのWindows Inkの仕組みを詳しく見る

2016年09月11日 10時00分更新

文● 塩田紳二 編集● ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

Windows 10が持つペンのサポート機能を確認

 今回は、Windows 10 Anniversary Update(RS1)が持つペンのサポート機能を見ていくことにしよう。下の写真は、マイクロソフトがWinHEC 2016で示したペンの基本デザインだ。左側がSurface ProとPro 2で採用したワコムのEMR方式のもの、右がSurface Pro 3以降のMicrosoft Pen Protocol対応のものだ。

マイクロソフトが示したペンのデザイン。左はSurface Pro 2までのもの、右がPro 3以降のもの。新しいペンでは、Bluetoothボタンが後部に新設されている

 どちらも筆圧検出や2つのボタンが必須。ただしボタンは、ペン側面と後部に1つずつか、またはペン軸側面に2つのどちらか。前者は、ワコム社のEMR方式の標準的なペンのデザインだ。

 Surface Pro 3以降では、ペン後部に3つめのボタン(ClickNoteボタン)が付けられたが、これは、ペンとはハードウェア的な関係はなく、Bluetooth経由で本体に接続するボタンである。ただし、このボタンの仕様もWindows Inkではサポートしており、設定アプリの「デバイス」→「ペンとWindows Ink」で設定が可能だ。

RS1では、後部のBluetoothボタンの動作を設定できるようになった。TH2までのペン設定は簡易なもので、ペンハードウェアのメーカーが提供するユーティリティなどを併用していた

 TH2までは、Surface固有の設定で、TH1の時点では、OneNoteを立ち上げる機能に固定されていた。RS1では、標準的なペンハードウェアが定まったことを受けて、ペンの設定項目が増えている。

ペンの基本的な機能はWindows Inkが処理してくれる

 Windowsでは、ペンからの入力をマウスのようにポインティングデバイスの入力として扱うことができる。基本的な機能は、Windows Inkがすべて行なうため、たとえば、単にポインティングデバイスとしてユーザーの位置の指示を受け取るだけなら、アプリ側はペンであるかマウスなのか、あるいはタッチパネルなのかを意識する必要はない。

 しかし、ペン固有の入力、たとえば手書き文字のようなものを扱うにはアプリ側の対応が必要になる。このときに使われるのがInkと呼ばれるオブジェクトだ。Inkは、ペンの筆跡を記録したオブジェクトだが、複数の情報を内部に持つことができ、アプリ側からさまざまな情報を取得することができる。

 そのまま筆跡として図形として扱うこともできるし、Windowsが持つ手書き文字認識機能を使って、筆跡を認識してテキスト情報を得ることもできる。以前、タブレットPCなどを触ったことがある人なら、手書き文字認識では、認識候補が複数表示されたり、一部を修正して再認識させるといったことが可能だったことをご存じかもしれない。こうした機能は、すべてInk機能を利用して行なうことができる。

 WindowsのAPIは、Windows 8で導入されたWinRTで大きく変化した。Windows 10のUWPアプリもこのWinRT APIセットを利用する。これに対してデスクトップアプリ(Classic Windows Platformアプリ、CWPアプリなどとも呼ぶ)では、Win32 APIセットを利用する。ただし、CWP側でも.NET Frameworkから、WinRT APIセットの一部を利用することも可能だ。

 WinRTとWin32の違いは、APIの機能の「粒度」にある。Win32ではさまざまな可能性を考慮し制限を加えないように小さな「粒度」のAPIを多数そろえ、これを組みあわせて機能を実現する。これに対してWinRTは、アプリの機能などを考慮して大きな「粒度」のAPIをそろえる。

 たとえば、カメラで静止画を撮影するような場合、WinRTでは「静止画撮影してJPEGでファイル保存」するようなAPIが用意されているのでこれを使う。これに対してWin32 APIでは、「カメラデバイスの制御」「画像データの変換」「ファイルへの保存」といった細かいAPIを組みあわせて利用する。

 WinRTでのペンの扱いは、Windows Inkと呼ばれる一連のAPIセットに組み込まれている。基本的には、ペンの軌跡を取得する「Ink Canvas」を用意し、これをアプリのウィンドウに重ねて表示することなどで、アプリがいちいちペンの動きを追わなくてもInkオブジェクトの入力や表示が可能になる。RS1の強化点の1つは、このWindows Inkの強化であり、Windows Inkワークスペースに登録されているアプリは、そのためのデモとしての位置付けもある。

 このほかのRS1の強化点としてInk Toolbarがある。これは、Inkワークスペースにある「スケッチパッド」や「画面スケッチ」の右上に表示されるツールバーで、InkCanvasとともに開発時に表示位置などを指定しておくだけで、表示が行われ、ペンの設定やルーラーの表示などを勝手に行なってくれる。

画面右上にあるのがRS1で追加されたINK Toolbar。ペン先や描画色、ルーラーのオンオフなどを設定できる。また画面下に見えているルーラーもアプリが面倒をみる必要がない

 また、ここにあるルーラー機能もRS1で追加された機能の1つだ。半透明のルーラーをInkCanvas上に表示し、タッチで移動や回転を行ない、ペンでルーラーの付近を描画すると直線のINKを入力できる。こちらも、アプリ側は何もコードを書く必要がなく、Windowsが表示や操作のすべてを処理してくれる。

 Windows 10では、ペンは、マウスやキーボードなどと同じく「入力機器」として扱われる。すべての入力機器からのインプットは、Windowsが管理し、まとめて処理するようになっている。このためペンは、マウスのように単純なポインティングデバイスにもなるし、ペンがないシステムでは、InkCanvasにマウスで描画することもできる。

Windows 10の入力デバイスは、マウスやタッチパッド、タッチパネル、ペンなどをまとめて扱い、統一的な「ポインティングデバイス」として利用できる

 Windows 10でInkを扱うしくみはDirectInkと呼ばれる。これは、ペン入力の取得機能(ペンデジタイザのデバイスドライバなど)とInkCanvasとInkPresenterでペン入力を処理する機構だ。Inkの描画にはDirect2Dを使う。

 Windows 10以前、アプリケーションは、InkControlやInkContener、InkAnalyzerなど複雑な仕組みを使ってInkを処理していた。当初はInkをテキスト的に扱うことが目的で、ユーザーが入力したインクを認識してその並びを単語やパラグラフなどとして認識し、ペン入力された文書構造を管理していた。

 このため、たとえばInkデータを表示範囲に合わせて折り返して表示するなどが可能だった。しかし、このやり方は、ペン入力時のソフトウェア的な処理が重く、ペン入力時に遅延として現れていた。TH2まで付属していた「ジャーナル」は、この古い仕組みを使ったアプリケーションだ。これらは当時Tablet PC Technologyなどと呼ばれていた。

 Windows 10ではこれを改め、ソフトウェア的な処理を簡略化し、認識やストロークの分析を止めて、純粋にストロークとして扱うDirectInkを作った。このDirectInkでは、統一的な入力システムの上で、インク処理を行なう。

 中心になるのは、InkPresenterという部分だが、簡略的にインクを扱うInkCanvasを用意した。このDirectINKを使うことで、ソフトウェアによる処理を最低限に抑えることができる。下の写真は、マイクロソフトがWinHEC 2016のセッションでのデモで、上はWindows8.1までのペンによる描画で、下がDirectINKを使った場合だ。

Windows INKのDirectINK機能のデモ。上は従来のPen Serviceの場合で、ソフトウェアによる遅延によりペン先と描画位置がずれていた。DirectINKでは、ソフトウェア負荷を最小に抑え、遅延が小さくなっている

 実際のハードウェア上の描画を高速度カメラで撮影したもので、DirectINKを使った場合のほうがペン先と軌跡表示の間が近づいており、その差がソフトウェアによる処理時間の差になっているという。

 Windows InkのInkCanvasやInkToolbarは、InkPresenterという機能の上に作られている。

Windows INKは、インクの入力と描画を行なうInkCanvasとInkToolbar。その下にInkPresenterがある。上の2つを使うことでアプリを簡単にペン対応にすることが可能で、細かな処理が必要ならば、InkPresenterなどの下位のAPIを利用する

 アプリは、ペンからのInk入力を簡単に扱うには、ウィンドウに透明なInkCanvasを重ねて置く。これでペン入力や描画、削除などを行うことができる。Windows Inkワークスペースにあるスケッチパッドのようなアプリなら、InkCanvasが入力や表示をまとめてやってくれる。また、ペンの色変更などInkCanvasに対する制御もInkToolbarを付けておけば、Windowsがまとめてやってくれる。終了時など適当なタイミングでInkCanvasが保持しているデータをセーブすればよく、そのためのユーザーインターフェースもすでにInkToolbarに用意されている。

 インクを細かく扱う場合、InkPresenterにアクセスして制御を行なう。たとえば、文書にペンで注釈や書き込みを行う場合などだ。この場合、下の文書のスクロールなどにあわせてInk描画を動かす必要がある。こうした場合にInkPresenterを使うことで、アプリは入力されたInkを自身のデータとして扱うことができ、文書データとあわせて管理し、必要に応じてInkPresenterを使って、Inkデータを表示させるなどの処理を行なう。

 RS1でWindows Inkという機能が「完成」し、従来からのTablet PC PlatformのAPIセットを置き換えることが可能になったと見ていいだろう。DirectInkなどの機能はWindows 10 TH1で実装され、TH2、RS1と段階的に強化されてきた。

 RS1で従来のTablet PC Platform APIの代表的なサンプルアプリケーションだったWindows Journalが付属しなくなったのも、今後は、Windows Inkがペンの標準的なAPIセットになることを意味しているのだと思われる。また、これまでJournalが持っていた標準サンプル的な地位も、スケッチパッドなどのWindows Inkで作られたアプリが取って代わることになったのだと考えられる。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン