2012-09-21 10 views
6

は今、私は私のcanvasノードに対してGraphicsContextをつかみ、私は数十メソッドを用意して、私のcanvasJavaFX 2 Canvasノードをどのように拡大しますか?

gc.scale(2, 2); 

をしようとしています。だから私はズームインする何かが必要であることを知っている。しかし、私の試みは明白な「成長」または「ズーム」をもたらさない。これを適用または再描画するために私が呼​​び出す必要があるものはありますか?

答えて

5

私はgc.scale(2,2)がキャンバスに描画する次のものを2倍にスケールし、既存のものは描画していないと考えています。

キャンバスの縮尺を変更したい場合は、キャンバスにグラフィックスコンテキストではなくトランスフォームを設定することができます。

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

あなたはレイアウトマネージャのためのレイアウト計算に反映されるようにスケーリングキャンバスをしたいなら、あなたはグループの中で、あなたがズームのようなキャンバスの一部が切り取られているスケールキャンバス上の効果をしたい場合は、それをラップすることができますスクロールペインにキャンバスを配置し、そのキャンバスにビューポートを定義するか、キャンバスノード上にクリップを設定することができます。ピクセル化を議論する

アップデートは、私は、その後、変更したいときに、これまでに描かれたグラフィックスコマンドのすべてのレコードを保持する必要があるだろうと思い倍率にピクセル化の問題を回避するには

を発行しますキャンバスをクリアし、新しいスケールをキャンバスに適用してから、すべてのグラフィックコマンドを再生します。おそらく、svgのような形式を使ってグラフィックコマンドを記録することができます。

または、シーングラフを使用してキャンバスではなく描画するだけで、ピクセル化の問題は発生しません。

ここで注意すべき重要なことは、シーングラフのような保持モードの描画サービスではなく、キャンバスが一種の即時モードの火災であり、忘れてしまうことです。

+0

はい、これは機能します。ソレア。それはかなり悪いすべてをpixelates。行は単なるベクトルなので、設定した倍率のすべてを「再描画」する方法があるのだろうかと疑問に思っていますか? 普通のグループオブジェクトとキャンバスを使ったとき、私はこれを行うことができました。それは次のようになりました: 私のvoid reDrawPreview(){ のための(ノードn:canvsGroup.getChildren()){ ラインnd =(ライン)n; nd.setStrokeWidth(Draw2d.getStrokeWeight()); } – ril3y

+0

書式についてごめんね。コメントで書式を設定する方法がわからないのですか? – ril3y

+0

この動画の3:36にどのように動いていたかを見ることができます。 http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl – ril3y

関連する問題