前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >增加MATLAB屏幕截图功能

增加MATLAB屏幕截图功能

作者头像
万木逢春
发布2019-04-30 18:08:53
1.6K0
发布2019-04-30 18:08:53
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab

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

Java实现

代码语言:javascript
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档