Windows 10が持つペンのサポート機能を確認
今回は、Windows 10 Anniversary Update(RS1)が持つペンのサポート機能を見ていくことにしよう。下の写真は、マイクロソフトがWinHEC 2016で示したペンの基本デザインだ。左側がSurface ProとPro 2で採用したワコムのEMR方式のもの、右がSurface Pro 3以降のMicrosoft Pen Protocol対応のものだ。
どちらも筆圧検出や2つのボタンが必須。ただしボタンは、ペン側面と後部に1つずつか、またはペン軸側面に2つのどちらか。前者は、ワコム社のEMR方式の標準的なペンのデザインだ。
Surface Pro 3以降では、ペン後部に3つめのボタン(ClickNoteボタン)が付けられたが、これは、ペンとはハードウェア的な関係はなく、Bluetooth経由で本体に接続するボタンである。ただし、このボタンの仕様もWindows Inkではサポートしており、設定アプリの「デバイス」→「ペンとWindows Ink」で設定が可能だ。
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で追加された機能の1つだ。半透明のルーラーをInkCanvas上に表示し、タッチで移動や回転を行ない、ペンでルーラーの付近を描画すると直線のINKを入力できる。こちらも、アプリ側は何もコードを書く必要がなく、Windowsが表示や操作のすべてを処理してくれる。
Windows 10では、ペンは、マウスやキーボードなどと同じく「入力機器」として扱われる。すべての入力機器からのインプットは、Windowsが管理し、まとめて処理するようになっている。このためペンは、マウスのように単純なポインティングデバイスにもなるし、ペンがないシステムでは、InkCanvasにマウスで描画することもできる。
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を使った場合だ。
実際のハードウェア上の描画を高速度カメラで撮影したもので、DirectINKを使った場合のほうがペン先と軌跡表示の間が近づいており、その差がソフトウェアによる処理時間の差になっているという。
Windows InkのInkCanvasやInkToolbarは、InkPresenterという機能の上に作られている。
アプリは、ペンからの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で作られたアプリが取って代わることになったのだと考えられる。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ