Hitmap 技術

Rogue Wave® JViews では、Hitmap と呼ばれる新しいインタラクション技術が取り入れられています。これにより、JViews Web アプリケーションの応答性と対話性が著しく向上しています。 Hitmap 技術により、JViews Web アプリケーションにサーバーとの往復通信を必要としない純粋なクライアント・サイド・インタラクション能力がもたらされます。
強調表示とツールチップは、Hitmap 技術を使用して実行できる代表的インタラクションです。このセクションでは、Hitmap 技術の概要を示します。
Hitmap 技術を使用した強調表示およびツールチップの実行手順について詳しくは、「強調表示インタラクター 」および「ツールチップ・インタラクター 」を参照してください。

背景

Web は、本来テキスト指向分散ハイパーテキスト環境として設計されたものです。 このプラットフォームで豊富な対話式グラフィックを希望する要求は高まってきています。 残念ながら、この要求を実現する満足のいく、単純な統一されたソリューションはまだ出現していません。
Web 上で豊富な対話式グラフィックを提供する方法として、次の 3 つが競合しています。
  • Flash® Java™ アプレット、Silverlight™ など、Web プロトコルに対する専有プラグインおよび拡張。
  • Canvas HTML タグなど、Web グラフィックス用の新規標準。
  • Web サーバーがグラフィックスを生成して、イメージとして送るようなシン・クライアント・テクノロジー。これは、JViews Web テクノロジーのベースとなる方法です。
シン・クライアント方法の主な欠点は、提供される対話性が限定的であるという点です。ユーザーがクリックするか、グラフィカル・インタラクションを実行するたびに、表示表現を更新するために、Web サーバーとの往復通信が必要になります。JViews には、こうした状況を改善するために Hitmap 技術が取り入れられています。
グラフィカル・シン・クライアントの Web アプリケーションのコンテキストでは、Hitmap 技術によって任意のグラフィック・オブジェクトに対する高速ヒット・テストが実行されるので、アプリケーションがアプリケーション関連情報を画面上に指定されたポイントまたは領域に関連付けられるようになります。
例えば、次のシン・クライアントの Web アプリケーション画面には、ユーザーが編集可能なワークフロー・ネットワークが表示されます。
ユーザーが編集可能なワークフロー・ネットワーク
中央のイメージは、サーバーによって生成されたビットマップで、ある種のネットワーク・データを表示しています。Hitmap 技術を用いないと、 ノードをクリックするかノード上に移動することでこのノードを強調表示して関連情報を表示するには、 クリックされた点の座標をサーバーに送り、サーバーにこの点に対応するオブジェクトを計算させ、 (オレンジで) 強調表示されたオブジェクトを表わす新たに計算されたイメージとこのオブジェクトに関連したアプリケーション・データ (ここでは句 IlvSDMCompositeNode) を返す必要があります。 これにより、シン・クライアント・ソリューションの対話性や応答性が大きく損なわれることになります。
望ましい代替方法として、 クライアント Web ブラウザー内部で強調表示するオブジェクトおよびオブジェクトの境界に関連したセマンティック・データを取得してから、強調表示およびツールチップ表示あるいは適切なフィードバックをローカルで実行するローカル・スクリプトを実行することができます。
このようなグラフィック - アプリケーション間ドメイン・マッピングをグラフィカル・アプリケーションに実装する自然な (単純な) 方法は、グラフィック・オブジェクト (多角形、テキスト域、矩形、アイコンなど) のデータ構造を維持し、これらのオブジェクトのそれぞれをアプリケーション・ドメイン・オブジェクトのポインターに関連付けることです。したがって、マウスがアプリケーション表示の領域に位置付けられている場合、このデータ構造の全探索により、アプリケーションは交差するオブジェクトを取得し、そのオブジェクトから関連するセマンティック・データを取得できるようになります。この方法は、通常のグラフィカル・ユーザー・インターフェースでは実装と使用が簡単ですが、シン・クライアント・アプリケーションの場合には欠点となります。この欠点は、Hitmap 技術で解決できます。
Hitmap 技術を用いると、アプリケーションはバッファー化されたラスター・データ構造を定義します。このデータ構造により、アプリケーションでヒット・テストを実行する場合の計算コストを削減できます。関連ビットマップ内の「カラー・インデックス」は、表示する実際の色を表わすのではなく、個別に送信されるアプリケーション・データ・オブジェクトの配列内のインデックスを表わします。したがって、このラスター・マップには、グラフィック表示の形状と関連アプリケーション・オブジェクトへのマッピングの両方が組み込まれています。画面上の表示に有効なオブジェクトの数には制限があるので、使用される「色」の合計数は非常に少なく、これらのイメージは高度に圧縮可能でごく短時間に生成が可能になります。このようにして、クライアント/サーバーの帯域幅やサーバー・サイドの余分な計算を最小限にすることができる一方、正確な形状記述とアプリケーション・オブジェクト・マッピングが提供されます。
Hitmap 技術を用いると、ヒット・テストや強調表示をオフラインで実行でき、サーバーとの往復通信コストがかかりません。これにより、JViews Web アプリケーションに優れた応答性がもたらされるとともに、数多くの役立つアプリケーションを使用できるようになります。

Hitmap のデータ構造

Hitmap では、ラスター・データ構造が使用されます。ビットマップ・データ構造では各ピクセルの色情報が提供されるのに対して、Hitmap データ構造では各ピクセルのヒット・テスト情報が提供されます。
Hitmap 内の同じ“カラー・インデックス”を持つピクセルのセットは、領域と呼ばれます。 領域は、他のグラフィック・オブジェクトによって隠されていない、グラフィック・オブジェクトのピクセルから構成されます。
例えば、次のイメージは、赤い線と青の正方形という 2 つのグラフィック・オブジェクトからの 2 つの領域を示しています。
Hitmap 技術のデータ構造
左側のイメージ内の構造は、色情報がどのように表わされているのかを示します。 右側のイメージの構造は、同じビットマップのヒット・テスト情報を示します。数字の 1 は、 ピクセルが最初の領域 (赤い線で隠されていない青い正方形のピクセル) に属していることを意味し、数字の 2 は、ピクセルが 2 番目の領域 (赤い線) に属していることを意味します。
Hitmap は、インデックス付きビットマップと考えることができます。マウス位置の X 座標と Y 座標を与えることで、ピクセルが属するグラフィック・オブジェクトを直接指示することができます。これが、ヒット・テストをごく短時間に実行できる理由です。 領域のインデックスを与えると、その領域に属するすべてのピクセルが簡単に見つかります。これにより、グラフィック・オブジェクトの強調表示を短時間に行えるようになります。

Hitmap の生成方法

Hitmap は、カスタマイズされたラスター複合型の Java 2D™ 描画パイプラインを使用して生成することができます。通常のラスター複合ではグラフィック・オブジェクトのラスター化の時点でピクセルの色情報がバッファーに書き込まれるのに対して、Hitmap 複合ではレンダリングされるグラフィック・オブジェクトのインデックスがラスター・バッファーに書き込まれます。その他の 2D 描画パイプラインも Hitmap のレンダリングに使用できます。
例えば、前記のイメージで示した赤い線をレンダリングする場合、通常のラスター複合では対応するピクセルが赤とマークされます。しかし、Hitmap 複合では、赤い線のインデックス (この例では 2) が対応するピクセルに割り当てられます。
Hitmap 生成は、通常のペインティングと似ていますが、CPU 時間の面ではコスト削減になります。 テストによって、Hitmap の生成および圧縮は、同じイメージの通常のレンダリングおよび圧縮にかかる時間の 20% しかかからないことが示されています。

アプリケーション・データを Hitmap に関連付ける方法

サーバーは、Hitmap を生成するときには、アプリケーション・データ・オブジェクトの対応する表を使用します。ビットマップおよび Hitmap に加えて、この表が保持され、クライアント・ソフトウェアに送信されます。ユーザーのマウス・イベントへの応答で所定のポイントの “ピクセル・カラー” を取得し、この “色” 情報からこれをユーザーがクリックした表示領域に関連したアプリケーション・データを取得するために使用される整数 (領域インデックス) に変換するために、JavaScript メソッドが提供されています (クライアントの HTML ページに組み込まれています)。
次は、Hitmap のユース・ケースとアプリケーションの例です。
  • ツールチップ: クライアント・ソフトウェアは、Hitmap および関連したアプリケーション・データを使用して、ローカルでツールチップを構成して表示します。「ツールチップ・インタラクター」を参照してください。
  • 強調表示: クライアント・ソフトウェアは、サーバーによって送られたオリジナルのイメージの上に半透明のビットマップを重ね合わせて、強調表示の効果を作成し、ユーザーがグラフ表示内でノードを選択しているなどのフィードバックを提供します。「強調表示インタラクター」を参照してください。
  • キーボード・ナビゲーション: クライアント・ソフトウェアは、各領域について 4 つのグラフィック・オブジェクトに対する参照を含むある種の情報を取得します。この情報は、ユーザーが特定の矢印キーを押したときに、フォーカスが移されるグラフィック・オブジェクトを決定します。
  • カーソル: クライアント・ソフトウェアは、各領域に指定されている情報に従ってカーソル形状を変更します。