MATLAB调用java实现截屏

本文介绍了如何使用MATLAB通过java.awt.Robot和MouseInfo类结合warndlg函数实现电脑屏幕截图,并捕捉鼠标位置。通过warndlg提示用户移动鼠标确定截图区域,适用于多平台应用。
摘要由CSDN通过智能技术生成

1、前言

MATLAB本身没有对电脑屏幕进行截屏的函数,因此需要调用java.awt.Robot来截屏。另外,为了获取截图的位置使用ginput()函数只能实现在Figure对象上的坐标。所以这里还是调用java.awt.MouseInfo来取得鼠标当前在屏幕上的坐标。而MouseInfo.getPointerInfo().getLocation()函数又是立即获取坐标值,所以折中使用waitfor()函数来取得鼠标在屏幕上的坐标。

代码:(运行,第一个点为截图的左上角,第二个点为截图的右下角)

function [ imgData ] = screenShoot()
clc
clear
import java.awt.MouseInfo
f = warndlg('移动鼠标到第一个位置.', 'A Warning Dialog');
        waitfor(f);
        pause(2)
o1 = MouseInfo.getPointerInfo().getLocation();
f = warndlg('移动鼠标到第二个位置.', 'A Warning Dialog');
        waitfor(f);
        pause(2)
o2 = MouseInfo.getPointerInfo().getLocation();
%%
left= o1.getX();
top = o1.getY();
width = o2.getX()-left;
height = o2.getY()-top;

% Take screen capture
robot = java.awt.Robot();
pos = [left top width height]; % [left top width height]
rect = java.awt.Rectangle(pos(1),pos(2),pos(3),pos(4));
cap = robot.createScreenCapture(rect);
% Convert to an RGB image
rgb = typecast(cap.getRGB(0,0,cap.getWidth,cap.getHeight,[],0,cap.getWidth),'uint8');
imgData = zeros(cap.getHeight,cap.getWidth,3,'uint8');
imgData(:,:,1) = reshape(rgb(3:4:end),cap.getWidth,[])';
imgData(:,:,2) = reshape(rgb(2:4:end),cap.getWidth,[])';
imgData(:,:,3) = reshape(rgb(1:4:end),cap.getWidth,[])';
imshow(imgData);
end

效果:

参考:

(1)https://blog.csdn.net/qtyt567/article/details/79563563

(2)https://zhuanlan.zhihu.com/p/28724241

(3)https://cloud.tencent.com/developer/article/1420110

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JianRobSim

嘤嘤其名,求其友声!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值