图片缩略图

ScreenCapture——得到一个抓屏的图框或组件

41.9版本1.17.0.0 (KB) 实验后奥特曼
ScreenCapture Matlab GUI屏幕截图的任何处理,或指定矩形屏幕区域
5.0
45评级

56个下载

更新2016年5月16日

视图版本历史

查看许可协议

编者按:这个文件被选为MATLAB中央选择的

ScreenCapture任何Matlab GUI的屏幕截图处理(包括桌面、图、轴、图片或uicontrol),或指定的矩形区域位于相对于指定的处理。

屏幕区域捕获可能通过指定根(桌面)处理(= 0)。

输出可以是一个图像文件或一个Matlab矩阵(用于显示通过imshow()或进行进一步的处理),或者到系统剪贴板。

这个工具还允许添加一个工具栏按钮,便于互动屏幕截图。

语法:
imageData = screencapture(处理、位置、目标,PropName, PropValue,…)

输入参数:
处理——可选处理用于屏幕截图。
如果空/ unsupplied然后电流图(gcf)将被使用。
像素位置,可选位置数组:[x, y,宽度、高度]。
如果空或者不特定处理将使用的位置矢量。
如果处理和位置都是空的或不特定的位置
通过交互式mouse-selection将检索。
如果处理是一个图像,那么位置数据(而不是像素)单位,所以
捕获区域图/轴调整后保持不变(如imcrop)
目标——可选的文件名保存屏幕截图,或“剪贴板”/“打印机”字符串。
如果空或不特定那么没有输出文件将被完成。
文件格式将其扩展(JPG和PNG /……)。
金宝app支持的格式支持的是那些imwrite函数。
如果既没有目标也没有imageData指定,用户将被要求
交互式地指定输出文件。
PropName, PropValue -
可选的属性列表
例如,screencapture(“目标”、“sc.png”,“pos”, 10年,20年,30、40,‘处理’,gca)
PropNames可能缩写,是不区分大小写的。
PropNames也可以以任何顺序。
金宝app支持PropNames是:
——“处理”(默认值:gcf处理)
——“位置”(默认值:gcf位置数组)
——“目标”(默认值:”)
——“工具栏”(图处理;默认值:gcf)
这增加了屏幕截图按钮图的工具栏
如果指定这个参数,那么没有屏幕截图
将和返回imageData将[]。

输出参数:
imageData——图像数据在一个可接受的格式imshow函数。
如果文件名和imageData都是指定的,
用户将被要求交互指定输出文件。

例子:
imageData = screencapture;%交互式地选择矩形屏幕截图
imageData = screencapture (hListbox);%捕获图像的uicontrol
imageData = screencapture (0, (20、30、40、50));%选择一个小桌面
imageData = screencapture (gcf [20、30、40、50]);%选择一个小的图
imageData = screencapture (gca,[10年,20年,30、40]);%选择一个小轴区域
imshow (imageData);%在matlab图中显示捕获的图像
imwrite (imageData myImage.png);%将捕获的图像保存到文件中
screencapture (gcf [], ' myFigure.jpg ');%捕获整个图成文件
screencapture (gcf[],“剪贴板”);%将整个图捕捉到剪贴板
screencapture (gcf[],“打印机”);%打印整个图
gcf screencapture(“处理”,“目标”,“myFigure.jpg”);%和先前一样,保存到文件中
gcf screencapture(“处理”,“目标”,“剪贴板”);%和先前一样,复制到系统剪贴板
gcf screencapture(“处理”,“目标”,“打印机”);%和先前一样,发送到打印机
screencapture(“工具栏”,gcf);% gcf的工具栏添加一个屏幕截图按钮
screencapture(“工具栏”,[],“目标”,“sc.bmp”);%与默认输出文件名相同

技术描述:
http://UndocumentedMatlab.com/blog/screencapture-utility

错误和建议:
请发送Yair奥特曼(altmany gmail。com)

引用作为

实验后奥特曼(2021)。ScreenCapture——得到一个抓屏的图框或组件(//www.tatmou.com/matlabcentral/fileexchange/24323-screencapture-get-a-screen-capture-of-a-figure-frame-or-component), MATLAB中央文件交换。检索

评论和评级(76年)

尼克•亨特

然而,好写代码,谢谢:3我刚刚发现一个错误。捕获整个屏幕使用是不可能的

img = screencapture(0,“位置”,得到(0,'拉'));

2底行像素会丢失。

快速修复方案是

img = screencapture(0,“位置”,得到(0,'拉')- [0 2 0,0]);

尼克•亨特

美丽:3

合理徐

卢卡斯Langle

推特)@Arthur & @——我有同样的问题,我很快加入了screenScale——参数在472年到475年

screenScale = 1.25;%添加

javaX = screenScale * (desktopPos (1) + paramsStruct.position (1) +△+ dX);
javaY = screenScale *(拉(4)- desktopPos (2) - paramsStruct.position (2) - paramsStruct.position(4) +δy + dY);
宽度= screenScale * paramsStruct.position (3) + dW;
身高= screenScale * paramsStruct.position (4) + dH;

实验后奥特曼

推特)@Arthur & @——它好适合我Win10 R2019bPR使用以下测试用例:f = uifigure;p = uipanel (f,“位置”,[5550410]);一个=轴(p);冲浪(峰);d = screencapture (f);图;imshow (d)
显示弹出图我清楚地看到海浪(山峰)轴在矩形边界,设置在100%和125%,没有任何可见的裁剪图像。
如果你有一个测试用例不工作,寄给我。

亚瑟放荡者

你好Yair奥特曼
我需要一个解决方案要截图uifigures (appdesigner)和你的函数很好地工作。推特)不过,我注意到同样的问题比@ Filion咆哮:当默认比例不是100%(控制面板- >外观- >显示)但125%或更多,截图是严重的。有拉无论如何考虑规模比在你的工具吗?
谢谢!
亚瑟

雅蕾的歌

安德鲁。李

德米特里•

VALARMATHY K

伟大的

Andra Arnicane

伟大的工具,实验后,谢谢!
有人试图利用它与Psychtoolbox(运行在Matlab) ?我想通过Psychtoolbox截屏图像呈现。Psychtoolbox占据屏幕的时候,我只看到我呈现的形象。当我把screencapture在这段时间里,然而,格兰背景屏幕捕获的Matlab,前景而不是我想要的形象。
有人建议如何捕获前台窗口吗?
提前谢谢,
安德里亚

曼努埃尔·多姆霍夫

安妮Urai

elham

周案

Azura Hashim

你好,如果有一个浏览器屏幕上弹出,如会话将到期,代码等。有解决这个问题的办法吗?谢谢。

罗德里戈·圣·马丁

嗨! !

如何更好地解决捕获?
与Matlab OCR我必须得到数字,但5与6混淆,3是与8混淆。

谢谢! !

SK

太棒了。

伊凡Shorokhov

你好Yair奥特曼

我想要使用你的代码的OCR在线文本,我尝试使用
imageData = screencapture;
matlab交互式地选择屏幕截图矩形之外,但它没有工作。然后我尝试过以下:
imageData = screencapture (gca);
没有多少运气醚。

你能告诉我请我怎么可以交互式地选择屏幕截图矩形之外的matlab ?

亚当Filion

嗨Yair,伟大的工具。

我遇到一个问题时,Windows 7的功能控制面板- >外观- >显示默认的125%。这个工具应该让某些东西在屏幕上看起来更大,使它们更容易看到,但它看起来像底层java机器人不考虑这个。screencapture没有用正确的默认为125%,捕捉只图窗口加上一些区域外的一部分,但作品完美的如果我改变到100%。

可能想添加注释在文件中警告这(或者如果有一个编程检测方法和警告,更好)。

德怀特•巴塞洛缪

我试着运行2实例程序,使用这个工具。偶尔,1的情况下会产生一个错误不能访问系统剪贴板;我想因为其他实例对剪贴板的控制。你能想到的方法有软件等到剪贴板是免费的(可能超时)之前抛出错误呢?

詹姆斯和

嗨,实验后,

这是伟大的。然而,交互式屏幕截图不为我工作。

% imageData = screencapture;%交互式地选择矩形屏幕截图

任何建议吗?我用R2015b。

提前谢谢。

实验后奥特曼

@Dwight——我上传的一个变体建议修正。很抱歉拼错你的名字…

德怀特•巴塞洛缪

我有一个问题作为一个可执行的部署时使用函数。我修改了imclipboard (imgData)功能和它的工作原理。

%添加必要的Java类(ImageSelection)的Java类路径中
如果~存在(“ImageSelection”、“类”)

%获得可执行的目录(或m文件如果没有部署)
如果isdeployed %独立模式。
[状态,结果]=系统(“路径”);
MatLabFilePath = char (regexpi(因此,“路径=(. * ?);”,“令牌”,“一旦”));
其他% MATLAB模式。
(MatLabFilePath名字ext) = fileparts (mfilename (' fullpath '));
结束
javaaddpath (MatLabFilePath ' ');

% % javaaddpath (fileparts ((mfilename)), ' ');
结束

首歌

我有一个问题的功能。如果我使用两个显示器(主/子)和Matlab运行在主首先捕捉特定矩形区域(rectPos)。然后我关掉我的主要监控,所有的桌面去子监控包括Matlab,相同的函数调用调整新rectPos不会提供相同的形象在主监视器(有黑色区域)。只有重启Matlab解决这个问题。有没有一种方法不重启Matlab ? ?

旅行者

你好后,这确实是好东西。然而,我在仿真软件中使用频谱分析仪的块模型,和怀疑/如何可以用来捕获光谱window.Thank金宝apps。

大卫MERCIER

Marc Lalancette

神奇的和急需的!我发现的唯一途径图妥善保存。

实验后奥特曼

@Andy——你可以使用ScreenCapture函数在Matlab仿真软件模型中功能块。金宝app输入应该Matlab数字处理,它不能识别模型作为一个有效的输入。

安迪

有办法用这个模型吗?金宝app我试着运行文件,但它不喜欢进口线755 - 777。我试着打电话给那些第一次运行的代码,但是有更多的错误。

好的,谢谢你的回答后。

实验后奥特曼

@Fernando——当你把一个截图,图的分辨率完全显示分辨率窗口——完全相同数量的像素在屏幕上显示。调整图,更新其位置属性。如果你需要一个矢量化(可扩展)的形象,那么你应该保存图作为EPS / WMF和不使用这个工具。

华丽的代码后,谢谢。

我有两个问题。有办法设置位置(水平或垂直)和大小的图打印吗?和我怎么能增加jpg和png图像的分辨率?

sandeep

谁能提供一个代码,可以把多个屏幕截图每秒一定时间,如果没有手动选择interest.Thanks的面积。

RABEHI

亚尼克

从我5星,因为它在2014 b现在完美的工作!

实验后奥特曼

@Yannick——我只是上传一个固定的版本,还应该致力于R2014b(以及年长的Matlab版本)。

亚尼克

完美的工作直到2014 b。

如果我做的事:
“峰,imdata = screencapture (gcf);imshow (imdata)”
我得到的是一个黑色的形象。
最新版本的诀窍是什么?

海黄

与TMW从来没有正确数据打印/出口没有字体大小/职位被扭曲。这个工具是救命稻草。

安德鲁

Shalin梅塔

工作得很好。让我捕捉面板的截图!

Shalin梅塔

伟大的工具,它正是我需要的! !

罗宾

穆雷

好吧。但是我有另一个问题是矩形用于指定java坐标位置不一致(在代码中所提到的)。这些在左上角坐标——你的左下角,令人费解的是(0,0)在屏幕坐标系统。我看到有“估计的不确定性”,但这些是从哪里来的?应该只是一个简单的翻译/反射两个零之间的不确定性。我可以逆向抵消和减出来但是这每次都是不同的吗?

实验后奥特曼

穆雷的整个观点:交互式地选择一个屏幕截图框的唯一途径在桌面(不仅仅是在Matlab图)是创建一个几乎透明的图横跨整个桌面区域,然后让用户点击-拖动。你不需要找到边缘——简单地拖一盒你请求屏幕截图区域然后几乎透明的窗口将会消失,你会得到你想要的屏幕截图。

这里提供一个技术的解释是:http://undocumentedmatlab.com/blog/screencapture-utility

穆雷

鼠标点击窗口交互地选择目标区域不似乎工作得很好。窗口出现然后消失(几乎)当提示出现但仍几乎看不见,几乎不可能找到边缘。

实验后奥特曼

Hannu——你正在使用该实用程序错误。看的用法示例描述的例子。

Hannu K

screencapture (axesHandle,“目标”,“filename.jpg”)似乎保存图像,都是黑色的。同样的事情如果我给gcf句柄作为输入。

与其他轴轴在一个gui。我用家伙布局工具箱位置如果重要的任何一切。我也使用openGL渲染器需要透明,但我试着画家得到了类似的结果。

如果我只是叫screencapture()我得到鼠标点击提示,但是当我按下ok提示和gui成为用来控制。如果我在windows7多工具栏按Matlab-icon我看到一个新的空白Matlab预览图命名为“Figure2”但我不能选择它。我仍然可以关闭它从红十字会和之后,提示我的gui成为选择再次当然没有图保存。

我做错了什么?

杰克。科胡特克彗星

优秀,成功在getframe失败和复杂的人物w / subfigures和轴

实验后奥特曼

@Philipp——这是内装式的副产品javaaddpath函数,当你发现。这个限制这个函数已经存在多年,据我所知没有已知的解决方案。你可能会试图联系MathWorks要求这是固定的,但是不要期望太高…

菲利普Pruefer

我发现一个小问题,我不能修复的代码。

我用ScreenCapture GUI中我有几个全局变量定义。所有这些变量都当我运行首次ScreenCapture删除。我将其追溯到以下函数“javaaddpath”似乎删除我的全局变量。只有呼吁之后我第一次运行ScreenCapture加载的java文件。

- - - - - -
%添加必要的Java类(ImageSelection)的Java类路径中
如果~存在(“ImageSelection”、“类”)
javaaddpath ([cd, ' \工具\ ScreenCapture '], ' ');
结束
- - - - - -

我的解决方案是在GUI加载加载的java类。但是也许有一个更好的办法管理的脚本?也许有一个问题我Matlab版本是7.13。也许是时候升级…

菲利普Pruefer

N

失败与R2013b OSX小牛。

事实上,这似乎是一个OSX / JVM的问题。
https://java.net/jira/browse/macosx_port - 706

推荐- - - - - -
在imclipboard:
. io .IOException:数据转换失败:不是一个图像格式
(等)
推荐- - - - - -

java版本“1.6.0_65”
Java (TM) SE运行时环境(构建1.6.0_65-b14-462-11M4609)
Java HotSpot VM (TM) 64位服务器(构建20.65当- 462,混合模式)

N

失败与R2013b OSX小牛。

事实上,这似乎是一个OSX / JVM的问题。
https://java.net/jira/browse/macosx_port - 706

. io .IOException:数据转换失败:不是一个图像格式
(等)

实验后奥特曼

@Hong——你需要知道确切的像素位置矢量的外部应用程序,然后你可以用ScreenCapture在Matlab。我不知道一个简单的方法来通过编程得到外部的位置向量的过程,但是我认为这是可能的——你需要恐怕在线搜索解决方案。

在香港

优秀的工作,非常感谢!

然而,由于我不太熟悉matlab,我想问我怎么screencapture面积在其他应用程序中,例如Chrome,这样我可以继续监视应用程序和反应后期吗?谢谢你这么多!

杰里米

工作得很好,但似乎不是compilable。

奥利弗·伍德福德

伟大的工具。工作时getframe()没有。

Maysam Shahedi

它很酷!

亚当Filion

毛峰

实验后奥特曼

@Mikhail——ScreenCapture使用java.awt。机器人,只有抓住了位图图像

米哈伊尔•

非常好!

如何获取一个矢量文件格式,而不是位图?

Joerg

实验后奥特曼

@Lapili桑切斯- screencapture代码已经包含我们的修正版本的代码——这是更正后的代码上面的“我们”发布了他的评论。

此外,目前没有使用这段代码,因为我甚至包括更快的代码,基于Jan西蒙评论。Jan西蒙更快的代码,是当前screencapture的基础设施。

看看getScreenCaptureImageData screencapture内()函数。米的更多信息

lapili桑切斯

> > %宏
> > conv = @ (a, b, c)双(bitand (a, b 255 ^)) / 255 c ^;

只是一个小的修正,从我们的代码应该是这句话:
conv = @ (a, b, c)双(bitand (a, 256 ^ b - 256 ^ (b - 1))) / 256 c ^;

谢谢,这段代码非常快!

Yanxiong李

布兰登

Dinie默罕默德

1月

谢谢后!新版本适用于Matlab 6.5,如果你下载詹姆斯Tursa的特型替代FEX (# 17476)。
捕获整个屏幕边缘完全不匹配。例如,这是准确的:
img = screencapture(0,“位置”,[1、2、1024、768]);
然后左上角三个像素(255,0,0),[0255,0]和[0,0255]。其余的形象很好。在Matlab下这些有趣的2009像素不出现。

1月

感谢详尽实现屏幕捕获工具。它适用于一些微小的修改甚至在Matlab 6.5。
转换从INT32 getDataStorage Matlab RGB数组可以在一半的时间完成。让定型分裂INT32值代替昂贵的BITSHIFT和BITAND(第401行):
pixelsData =重塑(定型(…
jImage.getData。getDataStorage uint8) 4, w h);
imgData =猫(3,……
置(重塑(pixelsData (3::), w h)),…
置(重塑(pixelsData (2::), w h)),…
置(重塑(pixelsData (1::), w h)));
这是最耗时的部分,进一步加速可能是有用的。

我们

一个很好的机器人,FEX社区一直在寻找很长时间…
两个想法:
1)在交互模式下,用户失去数据如果没有输出参数被选中时,这可能有点令人沮丧:
)警告(?)
b)一个新的默认图显示结果(?)
2)我们一直使用这种方法,这可能是快一点(取决于捕捉的大小)将飞机在一次使用一个宏……

%的输入
%发送葡开/ yoff / xlen / ylen
%分配后加载java的东西……
rob =机器人;
%的宏
conv = @ (a, b, c)双(bitand (a, b 255 ^)) / 255 c ^;
在这个pos %捕捉屏幕内容
rec =矩形(发送葡开,yoff、xlen ylen);
帽= rob.createScreenCapture (rec);
dat = cap.getData;
buf = dat.getDataStorage;
buf =定型(buf (:), uint32);
buf =重塑(buf dat.getWidth dat.getHeight)。”;
毫米= 0([大小(buf), 3);
毫米(::3)= conv (buf 1 0);% bitand (buf 255 ^ 1)。/ 255 ^ 0;
毫米(::2)= conv (buf 2 1);% bitand (buf 255 ^ 2)。/ 255 ^ 1;
毫米(::1)= conv (buf 3 2);% bitand (buf 255 ^ 3)。/ 255 ^ 2;
毫米= mm. / 255;
%……显示在一个常规图
图;
集(gca,“位置”,[0,0,1,1);
图像(mm);
轴形象;
轴;

3)原则上,机器人本身可以使用屏幕上的任何位置;就好了——不过,不可否认的,添加这个特性

我们

MATLAB版本兼容性
创建R2007b
兼容任何释放
平台的兼容性
窗户 macOS Linux
标签添加标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!