0

ストリームデスクトップをキャプチャして、Javaのデータグラムを介して(クライアントに)送信したいと思います。次の例でスクリーンショットを作成します。

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
public class Captura{
    static public void captureScreen(String fileName) throws Exception {
        Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        Rectangle screenRectangle = new Rectangle(screenSize);
        Robot robot = new Robot();
        BufferedImage image = robot.createScreenCapture(screenRectangle);
        ImageIO.write(image, "png", new File(fileName));
    }
//----
    public static void main(String[] args) {
        try{
            System.out.println("[ Captura iniciada ]");
            //sleep 5 sg
            Thread.currentThread().sleep(5*1000);
            String FILENAME="/home/jose/Desktop/captura01.png";
            Captura.captureScreen(FILENAME);
            System.out.println("[ Captura finalizada ]");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

Robotクラスも使用する必要がありますか?、ストリームを送信するにはどうすればよいですか?

手伝ってくれてありがとう。

よろしく!

4

2 に答える 2

2

これにはデータグラムを使用しません。ネットワークエラー、輻輳、または受信機が追いつかない場合、データグラムが失われ、スクリーンショットが破損します。

通常の(TCPなどの)ソケットを使用し、トランスポート層に失われたパケットと回復を処理させることをお勧めします。

于 2010-12-03T14:26:16.550 に答える
1

FileInputStreamを介して、書き込んだばかりのスクリーンショットファイルを読み取るか、画像をByteArrayOutputStreamに直接書き込むことができます。

    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    ImageIO.write(image, "png", buffer);
    byte[] data = buffer.toByteArray();

その後、データをいくつかのパケットに分割し、DatagramSocketを介して送信できます(1つのUDPパッケージの場合は大きすぎます)。

于 2010-12-03T15:04:36.747 に答える