Canvas
を含むJavaFXの透明なStage
を使用しています。ロボットを使用したJavaFXキャプチャ画面
ユーザーは、マウスをドラッグしてキャンバスにrectangle
を描くことができます。私が使用しています
try {
ImageIO.write(bufferedImage,extension,outputFile);
} catch (IOException e) {
e.printStackTrace();
}
を画面から
image
をキャプチャするには:
gc.clearRect(0, 0, getWidth(), getHeight()); // [gc] is the graphicsContext2D of the Canvas
// Start the Thread
new Thread(() -> {
try {
// Sleep some time
Thread.sleep(100);
// Capture the Image
BufferedImage image;
int[] rect = calculateRect();
try {
image = new Robot().createScreenCapture(new Rectangle(rect[0], rect[1], rect[2], rect[3]));
} catch (AWTException e) {
e.printStackTrace();
return;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}).start();
を彼はを打つ私が使用して画像を保存していを入力します。
問題:
これに代え
JavaFX Thread
はscreen.Butそれをので、私はあなたがそれを超えると100ミリ秒を待っている見ることができるようにThread
を使用していますCanvas
をクリアしてからキャプチャしますとき、私は知りませんすべての時間を働いていない、私は何を意味することは、時にはCanvas
がクリアされていないと私は(原因Canvas
がまだクリアされていない)、この画像を取得することです::
質問:
JavaFX
はCanvas
はので、私はその後の画面をキャプチャすることができますクリアしたとき、私は知っているどのように?
それは、私は、Javaで画面をキャプチャするために知っている唯一の方法ですが、
JavaFX
でSwing
をミキシングが推奨されていません...
「パルス」とは何ですか、「パルス」が2度目にレンダリングされることを知っていますか?JavaFXでのロボット実装のインポートに関する計画?最後にあなたが良いアイデアを持っているなら、聞くのがいいでしょう!答えをありがとう... – GOXR3PLUS
テストを通じて、それは全体の画面または大きな領域を選択する小さな矩形のためにのみ動作します。キャンバスがクリアされていない無効なイメージを持っています.. – GOXR3PLUS
パルスは毎秒60のターゲットレートで生成されますFXツールキット(FXアプリケーションスレッドが行う必要がある作業が長すぎる場合、頻繁に発生する頻度は低いです)。各パルス上で、UI「フレーム」がレンダリングされる。再描画が必要なUIの部分が再描画されます。 'AnimationTimer.handle(...)'はフレームごとに一度呼び出されることが保証されています。したがって、 'handle()'が2回呼び出されるまで待って、 'clearRect()'を呼び出してから、少なくとも1つの完全なフレームがレンダリングされるまで待つことです。なぜそれが大きなキャンバスのために働いていないのか分かりません... –