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