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发送(对于一个 UDP 包来说,它会太大)。

于 2010-12-03T15:04:36.747 回答