去公司2小时 2020-04-07 12:21 采纳率: 0%
浏览 143

JAVA robot截图后怎么通过socket传送给android显示在ImageView

我今天找了一天没找到啊!网上方法都试过了。。

public Bitmap getScreenshot(){
        if(input!=null) {
            try {
                int size = input.readInt();
                byte[] data = new byte[size];
                int len = 0;
                while (len < size) {
                    len += input.read(data, len, size - len);
                }
                ByteArrayOutputStream outPut = new ByteArrayOutputStream();
                bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                bmp.compress(Bitmap.CompressFormat.PNG, 100, outPut);
                Log.d("截图", "getScreenshot: ");
                return bmp;
            } catch (IOException e) {
                Log.e("截图", "getScreenshot: " + e.toString(), e);
                return null;
            }
        }
        return null;
    }

Log.d("截图", "getScreenshot: ");这句怎么也执行不到。。

  • 写回答

1条回答

  • 时光不老c 2024-02-22 13:20
    关注

    在Java中使用java.awt.Robot类获取屏幕截图后,可以通过网络套接字(Socket)将其发送到Android设备,并在Android端接收并显示在ImageView控件中。以下是实现这个流程的步骤概述:

    Java端:截取屏幕并发送截图

    1. 截取屏幕

      import java.awt.*;
      import java.awt.image.BufferedImage;
      import javax.imageio.ImageIO;
      import java.io.ByteArrayOutputStream;
      import java.io.IOException;
      import java.net.Socket;
      
      // 创建Robot对象
      Robot robot = new Robot();
      
      // 截取屏幕
      BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
      
      // 将图片转换为字节数组
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      ImageIO.write(screenShot, "PNG", byteArrayOutputStream);
      byte[] screenshotBytes = byteArrayOutputStream.toByteArray();
      
      // 创建Socket连接到Android设备
      Socket socket = new Socket("android_device_ip", android_server_port);
      
      // 获取输出流,用于发送数据
      OutputStream outputStream = socket.getOutputStream();
      
      // 发送图片长度信息和图片数据
      DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
      dataOutputStream.writeInt(screenshotBytes.length);
      dataOutputStream.write(screenshotBytes);
      
      // 关闭资源
      dataOutputStream.close();
      outputStream.close();
      socket.close();
      

    Android端:接收并显示截图

    1. 创建一个ServerSocket或Socket来监听连接
      在Android应用中需要创建一个服务或者后台线程运行一个ServerSocket来监听传入的连接。

    2. 接收图片数据
      当收到连接时,读取输入流中的数据,并按照发送顺序先读取图片长度,然后读取相应长度的字节流。

      import java.io.DataInputStream;
      import java.io.InputStream;
      import java.net.ServerSocket;
      import java.net.Socket;
      import android.graphics.Bitmap;
      import android.graphics.BitmapFactory;
      import android.widget.ImageView;
      
      // 假设你已经有了一个ImageView控件
      ImageView imageView = findViewById(R.id.imageView);
      
      // 创建ServerSocket监听连接
      ServerSocket serverSocket = new ServerSocket(android_server_port);
      
      // 等待连接
      Socket clientSocket = serverSocket.accept();
      
      // 获取输入流
      InputStream inputStream = clientSocket.getInputStream();
      DataInputStream dataInputStream = new DataInputStream(inputStream);
      
      // 读取图片长度
      int length = dataInputStream.readInt();
      
      // 创建字节数组缓冲区
      byte[] imageBytes = new byte[length];
      dataInputStream.readFully(imageBytes);
      
      // 将字节数组转换成Bitmap
      Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, length);
      
      // 显示图片到ImageView
      imageView.setImageBitmap(bitmap);
      
      // 关闭资源
      dataInputStream.close();
      inputStream.close();
      clientSocket.close();
      serverSocket.close();
      

    请确保两端都正确处理了网络连接的异常情况,并且根据实际需求考虑数据压缩、加密等附加功能以提高传输效率和安全性。同时,由于上述代码片段是简化示例,实际开发中需符合Android安全规范以及网络通信的最佳实践。

    评论

报告相同问题?

悬赏问题

  • ¥200 关于#c++#的问题,请各位专家解答!
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀