8

現在GraphicsContextcanvasノードの を取得して、

gc.scale(2, 2);

canvasの場合、数十のメソッドが利用可能です。だから、ズームインする何かがなければならないことを私は知っています。ただし、私の試みでは、明らかな「成長」または「ズーム」は発生しません。これを適用または再描画するために呼び出す必要があるものはありますか?

4

1 に答える 1

7

gc.scale(2,2)キャンバスに次に描くものは、すでに描いたものではなく、2倍に拡大されると思います。

キャンバスをスケーリングする場合は、グラフィック コンテキストではなく、キャンバスに変換を設定できます。

canvas.setScaleX(2);
canvas.setScaleY(2);

拡大縮小されたキャンバスをレイアウト マネージャーのレイアウト計算に反映させたい場合は、それをグループにラップできます。拡大縮小されたキャンバスでキャンバスの一部が切り取られたような効果をズームしたい場合は、次のいずれかを配置できます。 ScrollPane でキャンバスを作成し、それにビューポートを定義するか、キャンバス ノードにクリップを設定します。

ピクセル化の問題について議論するための更新

拡大時のピクセル化の問題を回避するには、これまでに描画されたすべてのグラフィック コマンドを記録しておく必要があると思います。次に、ズーム率を変更したい場合は、キャンバスをクリアし、新しいスケールをキャンバスに適用します。をクリックしてから、すべてのグラフィックス コマンドを再生します。おそらく、svg のような形式を使用して、グラフィック コマンドを記録できます。

または、シーン グラフを使用して、キャンバスではなくそこに描画することもできます。そうすれば、ピクセル化の問題も発生しません。

ここで注意すべき重要なことは、canvas は、シーン グラフのような保持モードの描画サービスではなく、一種の即時モードのファイア アンド フォーゲットのものであるべきだということです。

于 2012-09-21T01:46:28.647 に答える