简单实现手机投屏到电脑代码

news2024/11/23 20:53:34

1、从手机截图到sdcard

2、将图片导出到PC

3、从PC加载图片

4、开启定时器

1、

    private static void takeScreenshot(String path) {
        long t1 = System.currentTimeMillis();
        String command = "adb devices"; // 替换为你需要执行的shell命令
        String command1 = "adb shell screencap -p /sdcard/screencap.png"; // 替换为你需要执行的shell命令
        String command2 = "adb pull /sdcard/screencap.png " + path; // 替换为你需要执行的shell命令
        String command3 = "adb shell rm /sdcard/screencap.png"; // 替换为你需要执行的shell命令
        String command4 = "rm -rf " + path; // 替换为你需要执行的shell命令
        try {
//            Process process = Runtime.getRuntime().exec(command);
            Process process1 = Runtime.getRuntime().exec(command1);
            Process process2 = Runtime.getRuntime().exec(command2);
            Process process3 = Runtime.getRuntime().exec(command3);
//            Process process4 = Runtime.getRuntime().exec(command4);

//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }
            {
                BufferedReader reader = new BufferedReader(new InputStreamReader(process1.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
            }
//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process2.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }
//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process3.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }
//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process4.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }

            long t2 = System.currentTimeMillis();
            System.out.println("takeScreenshot Exited with code: 时间:" + (t2 - t1));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2、

static BufferedImage getImage(String folderPath) {
    long t1 = System.currentTimeMillis();
    File folder = new File(folderPath);
    File[] listOfFiles = folder.listFiles();
    BufferedImage bufferedImage = null;
    for (File file : listOfFiles) {
        if (file.isFile() && file.getName().toLowerCase().endsWith(".png") || file.getName().toLowerCase().endsWith(".jpg") || file.getName().toLowerCase().endsWith(".jpeg")) {
            try {
                bufferedImage = ImageIO.read(file);
                // 1080*2340
                System.out.println("getImage " + bufferedImage.getWidth());
                System.out.println("getImage " + bufferedImage.getHeight());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                long t2 = System.currentTimeMillis();
                System.out.println("getImage : 时间:" + (t2 - t1));
                return bufferedImage;
            }
        }
    }
    return null;
}

3、

    static JFrame jFrame;
    static JLabel jLabel;

    static void showFrame(BufferedImage screenFullImage) {
        // 1080*2340
        jFrame = new JFrame("Screen Capture");
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jLabel = new JLabel("");
        //设置标签大小,这种可以设计成自己想要大小
        jLabel.setBounds(0, 0, 500, 900);
        //将图片进行转换添加到标签当中  这个是工具类,具体参考下面给出代码
        setImgSize(screenFullImage, jLabel);
        jFrame.add(jLabel);
        jFrame.pack();
//        frame.setSize(300,600);     // 设置JFrame的尺寸
        jFrame.setVisible(true);
    }

4、

private static final int DELAY = 400; // 帧间隔,单位毫秒

public static void main(String[] args) {
    String path = "/Users/Desktop/command/png2";
    takeScreenshot(path);
    BufferedImage image = getImage(path);
    showFrame(image);
    Timer timer = new Timer(DELAY, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("actionPerformed");
            takeScreenshot(path);
            BufferedImage screenFullImage = getImage(path);
            setImgSize(screenFullImage, jLabel);
        }
    });
    timer.start();
}

5、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

氧化锆ZrO2纳米颗粒50nm|L-ZrO2@mSiO2|Ir1-N-C/ZrO2|AuPd/HB-ZrO2

氧化锆ZrO2纳米颗粒50nm|L-ZrO2mSiO2|Ir1-N-C/ZrO2|AuPd/HB-ZrO2 氧化锆(ZrO₂)纳米颗粒,特别是直径为50纳米(nm)的颗粒,是一种具有多种应用前景的功能材料。这种材料因其独特的物理和化学性质&#xff0c…

大一计算机课程之线性代数

《大一计算机课程之线性代数》 在大一的计算机课程中,线性代数是一门极为重要的基础学科,它就像一把神奇的钥匙,为计算机科学领域的诸多方面开启了智慧之门。 线性代数主要研究线性方程组、向量空间、线性变换等内容。对于计算机专业的学生…

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。 注释的分类及语法 注释分为两类:单行注释 和 多行注释。 单行注释 只能注释一行内容,语法如下…

LabVIEW提高开发效率技巧----事件触发模式

事件触发模式在LabVIEW开发中是一种常见且有效的编程方法,适用于需要动态响应外部或内部信号的场景。通过事件结构(Event Structure)和用户自定义事件(User Events),开发者可以设计出高效的事件驱动程序&am…

深度探索:Linux CentOS 7内核的奥秘与管理之道

🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Linux简介 2、CentOS 7简介 3、什么是内核 …

【3dgs】总结3DGS与NeRF如何重塑SLAM(24年4月最新进展)

【3dgs】总结3DGS与NeRF如何重塑SLAM! 1. 摘要2. 简洁3. 背景3.1 Existing SLAM Surveys3.2 progress in Radiance Field Theory3.3.1 NeRF3.3.2 3dgs3.4 数据集 4 数据集4.1 SLAM3.1 RGB-D SLAM方法3.1.1 基于NeRF风格的RGB-D SLAM3.1.2 基于3DGS风格的 RGB-D SLAM…

PHP政务招商系统——高效连接共筑发展蓝图

政务招商系统——高效连接,共筑发展蓝图 🏛️ 一、政务招商系统:开启智慧招商新篇章 在当今经济全球化的背景下,政务招商成为了推动地方经济发展的重要引擎。而政务招商系统的出现,更是为这一进程注入了新的活力。它…

【C++】踏上C++学习之旅(一):初识C++和命名空间

文章目录 前言1. 初识C2. C的发展阶段2. 命名空间2.1 为什么要有命名空间?2.2 命名空间的语法2.3 命名空间的原理2.4 使用命名空间的三种方式2.4.1 加命名空间名称及作用域限定符( :: )2.4.2 使用using关键字将命名空间中某个成员 引入2.4.3 使用using namespace 命…

注意力机制篇 | 清华大学提出Focused Linear Attention取代Self-Attention成为ViT的新宠

前言:Hello大家好,我是小哥谈。Focused Linear Attention(聚焦线性注意力)是一种用于视觉Transformer模型的注意力机制,旨在提高效率和表现力,它解决了传统线性注意力方法的两个主要问题:聚焦能力和特征多样性。🌈 目录 🚀1.基础概念 🚀2.网络结构 🚀3.…

网络安全学习路线-适合入门小白

首先说明,我是一名CTF的web手,这是我自己亲身学习网络安全的路线,希望能够帮到大家,我虽然不是大牛,但我也希望能够帮助一些网安小白找到自己学习的方向,后面有就业的详细安全技术要求,如果真想…

大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

基于知识图谱的宁夏非遗问答系统

八维视角探索宁夏非遗文化——基于知识图谱的非遗问答系统 作为一名程序员,能将大数据与文化传承结合,赋予历史新的生命,是件多么振奋的事!今天给大家介绍的是一款基于知识图谱技术的宁夏非物质文化遗产问答系统。无论你是学术研…

数字化转型最佳实践与实施技巧:理论指导与企业应用路径

数字化转型中的最佳实践与实施技巧 企业在实施数字化转型时,面对的最大挑战之一是如何将理论转化为实际可操作的行动。成功的转型不仅依赖于新技术的引入,还涉及如何确保架构蓝图与业务目标一致,如何在确保合规的基础上进行创新,…

重磅!博世「入局」Chiplets,汽车芯片格局或迎来新「拐点」

汽车行业似乎并不想重复PC、手机时代的老路。 在过去几年时间里,由于消费类芯片巨头(包括英伟达、高通、AMD、英特尔等)大举进军汽车行业,导致传统Tier1和汽车芯片厂商逐步失去了市场控制权。如今,chiplets技术或许将重…

PHP实现OPENSSL的EVP_BytesToKey

使用PHP和nodejs进行通讯时候遇到双方加解密结果不一致的问题。 注意到crypto.createCipher(algorithm, password[, options])方法有如下的提示。 The implementation of crypto.createCipher() derives keys using the OpenSSL function EVP_BytesToKey with the digest alg…

Springboot整合抖音小程序获取access-token图片检测V3

抽取配置文件 appId以及secret需要自行在抖音开放平台获取 dy:appId: ttb0xxxxxsecret: 12a19a426xxxxxxxxxxxxx获取access-token 参照文档我们调用此接口需要先获取access-token 获取access-token官方文档地址 注意事项 client_token 的有效时间为 2 个小时,重复获…

基于Matlab使用蚁群算法寻找最优路径

基于Matlab使用蚁群算法寻找最优路径 与Dijkstra算法使用相同的地图。 每只蚂蚁都从起点出发,直到抵达终点。这与Example5_1.m 中解决旅行商问题不一样,旅行商问题中每一代的蚂蚁都是随机从一个节点出发。 文件说明 Example5_1.m 简单对参考资料2中的…

重启Windows远程的复制粘贴功能

有些时候远程Windows电脑偶尔会出现复制粘贴失效的情况 打开任务管理器,进程搜索RDP 剪贴板监视程序右键关闭任务。 因为远程剪切板程序位于C:\Windows\System32,所以直接winr输入rdpclip.exe执行即可启动。

Java项目实战II基于Java的医院急诊系统设计与实现(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在现代医疗…

提升正则表达式性能:全面解析Golang regexp/syntax包

提升正则表达式性能:全面解析Golang regexp/syntax包 介绍基本概念正则表达式简介regexp/syntax包的作用 regexp/syntax包的结构核心组件结构详解ParserRegexpOpInstProg 使用Parser解析正则表达式解析正则表达式AST的结构 分析解析后的正则表达式树AST节点类型分析…