2

JFrameにヘビーウェイトコンポーネント(JxBrowser)を含むデスクトップアプリケーションがあります。GUIからスナップショットを作成し、それをたとえばpngファイルに保存するにはどうすればよいですか?

注:Graphics2dとComponent.paint()/ paintAll()/ print / printAllを使用するメソッドは、軽量コンポーネントに対してのみ機能します。

どんな答えもありがたいです!

編集

私はすでにこれを試しました:

robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); 

しかし、私は内側のコンポーネントをキャプチャしたいです...

編集

状況はこのソリューションに収束しているようです。JFrameに大きなヘビーウェイトコンポーネントがあるため、JScrollPaneでレンダリングされる場合、プログラムでスナップショットを取得し、screencaptureでスクロール/スクリーンショットする他の方法はありませんか?

4

4 に答える 4

2

私の名前は Roman で、TeamDev の開発者です。

JxBrowser コンポーネントは、ネイティブの mozilla ウィンドウを埋め込んで Web ページを表示する重量のあるコンポーネントです。JxBrowser コンポーネントから完全な Web ページのスクリーンショットを取得するには、Web ページのスクロールで Java Robot 機能を実際に使用できます。小さな Web ページの場合、このソリューションは問題ありません。ただし、大きな Web ページのスクリーンショットを受信するには、かなりの時間がかかります。また、Java Robot では画面のキャプチャしかできないことに注意してください。したがって、何らかのウィンドウが JxBroser コンポーネント上に表示される場合、それもキャプチャされます。

JxBrowser プロジェクトの観点から、この機能の作業を既に開始しています。目に見えない部分を含む完全な Web ページをキャプチャできるようにするソリューションは、Mozilla 内部のものに基づいています。Web ページ全体をキャプチャして、非常に簡単に画像として保存することができます。

JxBrowser ライブラリの次のリリースの 1 つにこの機能を追加する予定ですが、リリース日はまだ定義されていません。ご希望の場合は、TeamDev の RSS フィードを購読してください: http://support.teamdev.com/blogs/feeds/tags/company_news

または、お知らせいただければ、この機能が利用可能になったらお知らせします。ご不明な点がございましたら、お気軽にお問い合わせください。喜んでお手伝いさせていただきます。

よろしく、 ローマン

于 2009-05-18T11:17:30.190 に答える
1

プログラムで意味しますか?

どうですか

Point p = yourAwtComponent.getLocationOnScreen();
int w   = yourAwtComponent.getWidth();
int h   = yourAwtComponent.getHeight();

Rectangle rectangle = new Rectangle( p.x, p.y, w, h );

Image image = robot.createScreenCapture(rectangle);

そして、このようなもの:

ImageIO.write( image, "png", file );
于 2008-12-02T01:30:10.417 に答える
1

JxBrowser API は、Web ページ全体を PNG 画像として保存できる機能を提供します。サンプルをご覧ください。

于 2009-08-13T10:27:43.667 に答える
0

これを実装して、スクリーンショットを作成することもできます。

    int width = frameContainer.getWidth();
    int height = frameContainer.getHeight();

    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = image.createGraphics();

    frameContainer.paint(g2);

    return image;
于 2008-12-02T09:50:28.817 に答える