遅い→起動時

http://d.hatena.ne.jp/pmint/

Wintabを使わないタブレット入力

HP TouchSmart tm2tが気になる。Wintab仕様なのでtx2のように「SAIで使えない」ということもない。
けど、Wintab*1を使用しているアプリ(有名なものほぼ全て)がある一方で、タブレットPC用のインターフェイスを使用しているアプリもある。HP TouchSmart tx2でも使えるのはそういうアプリ。*2
後者のタブレットPC用アプリはどうなっているのか調べてみると、どうやらMicrosoft Tablet PC API(Microsoft.Ink.dll)でできそうな感じ。


Microsoft.Ink.dllの中にはフォームに貼るだけでデジタルインクのオンライン文字認識を実現できるコントロール*3があって、10日でおぼえるシリーズに載っていても良さそうなくらい短いコードで手書き文字認識アプリが作れてしまう。


その中にはデジタルインクを使わずにタブレット入力だけを可能にするライブラリ(Microsoft.StylusInput)もあって、ペイントツールなんかにはこれが良さそう。
中心になるクラスはMicrosoft.StylusInput.RealTimeStylus


作ってみたサンプルがこれ。
コントロールパネル「ペンとタッチ」で「プレス アンド ホールド」を有効にしておかないと筆圧が有効にならないので注意。*4

Stylus1.zip


垂直軸の傾きや、水平面上の向きなど細かいパラメーターがあるIntuosには完全に対応できない(とは言っても対応しているアプリなんてまるでないけれど)けど、平面座標(X, Y)と筆圧は取得できる。
Windows JournalやTablet PC 入力パネルでも筆圧は反映されていることを考えると当然だけど)
StylusInputが返す座標は「インクスペース座標」なので、ピクセル単位に変換する必要がある。座標変換にはMicrosoft.Ink.RendererのInkSpaceToPixel()を使用した。参考:Tablet PC の RealTimeStylus プラグインを使用してスタイラス入力をフィルタリングする | Microsoft Docs


あと、筆圧の最大値・最小値なんかも取得可能なので、筆圧精度に依存しない(ちゃんとした)プログラムを組むことができる。
タブレット入力とマウス入力を区別せずに同じコードで対応できるのもいい。


筆圧が256段階だと言われているtx2505の筆圧は0〜1023の数値で検出可能。筆圧が2048段階のIntuos4では0〜32767までの数値になる。

ただし、どちらも1ずつ上がっていくわけではなく、4や16を単位として変化する。(でも0の次は1だったりする。おそらくタブレットドライバーの気の利いた仕様?でも1以外にも奇数が現れるので、もしかするとドライバーは32767よりずっと高い精度の数値を検出していて、それを32767に丸めてアプリに渡しているのでは?)
つまりハードウェアとしては256段階や2048段階でも、ドライバーとしては1024段階や32768段階といった精度まで対応しているというわけで、将来そんな高精度な筆圧検出が可能になっても対応できるアプリを、今からでも作れるようだ。




ちなみにWPFを使えばSystem.Windows.Input系クラスで何の工夫もなくペンとマルチタッチを扱える。
StylusMoveイベントでStylusEventArgs.GetStylusPoints()を呼ぶだけで高精度な座標や筆圧を含んだオブジェクトが手に入る。

*1:Wintabは米LCS/Telegraphics社の商標だそうです。

*2:オプション設定で両方に対応するアプリもある。CELSYSILLUST STUDIO

*3:InkEditのこと。Microsoft.Ink.dllを「参照の追加」で…ではなく、GUIコントロールのリスト「ツールボックス」のほうに追加して使う

*4:WinXPのTabletPC版以降にある「プレス アンド ホールド」と言えば「OFFにするもの」だと思われているみたいだけど、ONでもペイントツールでは問題なし。
「描き始めがもたつく」とか「遅い」とか言われているのはおそらく絵チャやはてなハイクのような「Webブラウザーの中で動いて、ペンタブレットとマウスの区別ができないアプリ」限定の話。そもそもWintabを使っているときはTabletPC用機能は無効になるし、Microsoft.StylusInputでもアプリ内でフリック類を無効にできるので。
でも「プレス アンド ホールド」のカーソルは無効にできないみたい。機能自体は無効になるけど(なんで?)
ちなみに初期のBamboo Funでもたつきの原因だった「ダブルクリック距離」(ワコム製のタブレット設定にあるもの。筆圧感度の調整もできるやつ)は改善されて、有効にしたままでも問題にならなくなったみたい。