12

印刷画面の画像領域を使用して 2 台のモニターを取得しようとしていますが、1 台のモニターでしか機能しません。Figure 2 モニターの入手方法を教えてもらえますか?

        Robot robot = new Robot();    
        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage capture = new Robot().createScreenCapture(screenRect);
        ImageIO.write(capture, "bmp", new File("printscreen.bmp"));
4

3 に答える 3

3

あなたは試すことができます:

int width = 0;
int height = 0;

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();

for (GraphicsDevice curGs : gs)
{
  DisplayMode mode = curGs.getDisplayMode();
  width += mode.getWidth();
  height = mode.getHeight();
}

これにより、複数の画面の合計幅が計算されます。明らかに、上記の形式で水平方向に配置された画面のみをサポートします-他のモニターの配置を処理するには、グラフィック構成の境界を分析する必要があります(どの程度防弾にしたいかによって異なります)。

メイン モニターが右側にあり、左側でも画像を取得したい場合は、次のようにします。

Rectangle screenRect = new Rectangle(-(width / 2), 0, width, height);
BufferedImage capture = new Robot().createScreenCapture(screenRect);
ImageIO.write(capture, "bmp", new File("printscreen.bmp"));
于 2013-08-18T16:49:24.387 に答える
1

これは私が使用してテストしたコードです。動作します。resフォルダー内に2つのpngファイルを作成します(フォルダーに変更します)。1つはプライマリ用、もう1つはセカンダリ画面用です。ディスプレイに関する境界情報も印刷しました。両方のディスプレイを1つの画像に表示したい場合は、両方のモニターの幅を追加するだけでそれが得られます

public static void screenMultipleMonitors() {
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[] gDevs = ge.getScreenDevices();

    for (GraphicsDevice gDev : gDevs) {
        DisplayMode mode = gDev.getDisplayMode();
        Rectangle bounds = gDev.getDefaultConfiguration().getBounds();
        System.out.println(gDev.getIDstring());
        System.out.println("Min : (" + bounds.getMinX() + "," + bounds.getMinY() + ") ;Max : (" + bounds.getMaxX()
                + "," + bounds.getMaxY() + ")");
        System.out.println("Width : " + mode.getWidth() + " ; Height :" + mode.getHeight());

        try {
            Robot robot = new Robot();

            BufferedImage image = robot.createScreenCapture(new Rectangle((int) bounds.getMinX(),
                    (int) bounds.getMinY(), (int) bounds.getWidth(), (int) bounds.getHeight()));
            ImageIO.write(image, "png",
                    new File("src/res/screen_" + gDev.getIDstring().replace("\\", "") + ".png"));

        } catch (AWTException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
于 2016-06-19T03:08:42.120 に答える