去公司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安全规范以及网络通信的最佳实践。

    评论

报告相同问题?

悬赏问题

  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题