首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >增加MATLAB屏幕截图功能

增加MATLAB屏幕截图功能

作者头像
万木逢春
发布于 2019-04-30 10:08:53
发布于 2019-04-30 10:08:53
1.8K00
代码可运行
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab
运行总次数:0
代码可运行

借助Java或者Python实现截取屏幕指定矩形区域

Java实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function outputImage=screenCapture(subRegion,outputFile)
robo = java.awt.Robot;
if ~exist('subRegion','var') || isempty(subRegion)
    %获取屏幕尺寸
    t = java.awt.Toolkit.getDefaultToolkit();
    rectangle = java.awt.Rectangle(t.getScreenSize());
else
    x=subRegion(1);
    y=subRegion(2);
    w=subRegion(3);
    h=subRegion(4);
    rectangle = java.awt.Rectangle(x,y,w,h);
end
img = robo.createScreenCapture(rectangle);
%截取矩形局域
if nargout
    %转换为MATLAB矩阵
    h=img.getHeight();
    w=img.getWidth();
    data=img.getData();
    pix=data.getPixels(0,0,w,h,[]);
    tmp=reshape(pix(:),3,w,h);
    outputImage=zeros(h,w,3);
    for ii=1:3
        outputImage(:,:,ii)=squeeze(tmp(ii,:,:))';
    end
end
if exist('outputFile','var')
    %保存文件
    filehandle = java.io.File(outputFile);
    javax.imageio.ImageIO.write(img,'jpg',filehandle);
end
end

Python实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function outputImage=screenCapture(subRegion,outputFile)
if ~exist('subRegion','var') || isempty(subRegion)
    %获取屏幕尺寸
    subRegion = {0, 0, ...
        py.win32api.GetSystemMetrics(py.win32con.SM_CXSCREEN),...
        py.win32api.GetSystemMetrics(py.win32con.SM_CYSCREEN)};
else
    x=subRegion(1);
    y=subRegion(2);
    w=subRegion(3);
    h=subRegion(4);
    subRegion = {x, y, x+w, y+h};
end
img = py.PIL.ImageGrab.grab().crop(subRegion);
%截取矩形局域
if exist('outputFile','var')
    %保存文件
    img.save(outputFile);
end
if nargout
    %转换为MATLAB矩阵
    data = py.numpy.array(img).reshape(img.height*img.width*3);
    img_arr=cellfun(@uint8,cell(data.data));
    tmp=reshape(img_arr(:),3,w,h);
    outputImage=zeros(h,w,3);
    for ii=1:3
        outputImage(:,:,ii)=squeeze(tmp(ii,:,:))';
    end
    %     outputImage=outputImage/255;
end
end
对
比
Rect=[50,50,50,50];
tic
win.screenCapture(Rect);
toc
时间已过 0.065043 秒。
tic
pywin.screenCapture(Rect);
toc
时间已过 0.080278 秒。

Java实现的版本要快上一些,可能是Python在数值转化的时候耗费了一些时间

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帮你学MatLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总
============================================================================= ======================
黑泽君
2019/02/25
6840
java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总
Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南
我们发现这样效率太慢了,于是我们发现一个数的因子在平方根的左边,于是我们可以从左边遍历,这样可以节省时间
钮祜禄.爱因斯晨
2025/07/20
660
Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南
14(01)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
学正则表达式之前qq号问题: package cn.itcast_01; import java.util.Scanner; /* * 校验qq号码. * 1:要求必须是5-15位数字 * 2:0不能开头 * * 分析: * A:键盘录入一个QQ号码 * B:写一个功能实现校验 * C:调用功能,输出结果。 */ public class RegexDemo { public static void main(String[] args) { // 创建键盘录入对象 Sc
Java帮帮
2018/03/16
1K0
第三阶段-Java常见对象:【第八章 System类】
System.gc() 可用于垃圾回收.当使用System.gc() 回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源,在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用object类的finalize()方法,finalize()方法的作用是释放一个对象占用的内存空间时会被JVM调用.而子类重写该方法, 就可以清理对象占用的资源,该方法没有链式调用, 所以必须手动实现。
BWH_Steven
2019/08/09
4280
Java Math 数学工具类
包含用于执行基本数学运算的方法,如绝对值,对数,平方根和三角函数。它是一个final类,其中定义的都是一些常量和景甜方法。
用户7886150
2021/02/02
5090
大数据必学Java基础(四十九):Math类和Random类的讲解
【4】Math内部的所有的属性,方法都被static修饰:类名.直接调用,无需创建对象
Lansonli
2022/09/25
2640
大数据必学Java基础(四十九):Math类和Random类的讲解
JAVA之学习system类的概述和成员方法
结果示意图: A:System类的概述 * System 类包含一些有用的类字段和方法。它不能被实例化。 * B:成员方法 * public static void gc() *
吾爱乐享
2018/07/13
3490
random.nextInt()与Math.random()基础用法
random.nextInt() 为 java.util.Random类中的方法; Math.random() 为 java.lang.Math 类中的静态方法。
全栈程序员站长
2022/09/15
9380
random.nextInt()与Math.random()基础用法
java之学习Random类的概述和注意事项
结果示意图:  A:Random类的概述 * 此类用于产生随机数如果用相同的种子创建两个 Random 实例, * 则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。 * B:构造
吾爱乐享
2018/07/13
5270
Java学习之常用类篇
前面接触的数组,只能存储固定的长度和固定的类型。而为了解决这个问题,java提供了一个容器 arrayList集合类,让我们可以比较便捷的存储和操作对象。
全栈程序员站长
2021/12/13
2690
常用类
也就是public static void main(String[] args){ }
木瓜煲鸡脚
2019/07/22
4420
常用类
Java学习历程之----基础篇(十)
在解决实际问题时,对数字和日期的处理是非常普遍的,如数学问题、随机数问题和日期问题等。为了解决这些问题,Java 提供了处理相关问题的类,包括 Math 类、Random 类、BigInteger 类、Date 类等。
用户5410712
2022/06/01
2450
Java学习历程之----基础篇(十)
Java常用API
编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一定会提供一些用于控制机器人的Java类,这些类中定义好了操作机器人各种动作的方法。其实,这些Java类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为Xxx Robot API。本章涉及的Java API指的就是JDK中提供的各种功能的Java类。
闲花手札
2021/08/24
1.2K0
(建议收藏)Java基础知识笔记二(详细)
2,使用步骤: (1)导包:importjava.util.Random (2)创建对象:Random r=new Random(); (3)获取随机数:int number = r.nextInt(100);
用户7656790
2020/09/01
4350
Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File
java.lang  类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口:Serializable, Appendable, CharSequence ---- public final class StringBufferextends Objectimplements Serializable, CharSequence 线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意
二十三年蝉
2018/03/01
8840
Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File
Java八大常用类(六) Math类和Random类
Math类 package oop2.Mathh; public class MathA { public static void main(String[] args) { System.out.println(Math.PI); System.out.println(Math.E); System.out.println(Math.round(3.156)); //四舍五入 System.out.println(Math.ceil(3.16)); //向上取整
卢衍飞
2023/02/14
2140
Java基础其它补充知识点
编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一定会提供一些用于控制机器人的Java类,这些类中定义好了操作机器人各种动作的方法。其实,这些Java类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为Xxx Robot API。本章涉及的Java API指的就是JDK中提供的各种功能的Java类。
软件小生活
2021/08/16
3730
Java基础(十八):java比较器、系统相关类、数学相关类
Java微观世界
2025/01/21
1430
Java基础(十八):java比较器、系统相关类、数学相关类
【趣学程序】java常用类(二)
Math类的声明: publicfinalclassMathextendsObjectMath类是与数学计算有关的类,里面的方法都是静态方法,直接使用类名来调用即可。
趣学程序-shaofeer
2019/08/20
5130
Java 入门练习(31 - 35)
直接利用 Java 中封装类 Integer 所提供的 toBinaryString() 方法即可。
村雨遥
2022/09/08
4720
推荐阅读
相关推荐
java基础学习_常用类04_正则表达式、Math类、Random类、System类、BigInteger类、BigDecimal类、Date和DateFormat类、Calendar类_day14总
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档