MATLAB GUIツールは画面レコードを作ります

  • 私が直接自分自身を補うために小さなツールを作成するMATLABと考えるので、インストールを取得していない長い時間のためのスクリーンの録音ソフトウェアは、成功したとき、彼らは壊れ主な理由は、プログラムは主に、時限ショットを取得するためにタイマーを使用して、難しいことではありませんし、GIF形式にスプライス絵、そしてあなたは、これは図形の大きさを調整することによって達成される、あなたはポイントを知っている必要があり、記録画面のサイズを指定することができますが、Javaクラスを使用することで、少し表情が分かります。

3枚の写真を保存する必要がplay.jpg、pause.jpg、停止、JPG命名しました。
ここに画像を挿入説明 ここに画像を挿入説明 ここに画像を挿入説明
結果は以下の通りであります:
ここに画像を挿入説明


import java.awt.Robot
import java.awt.Rectangle
close all
%% GUI 初始化
homePage = figure('units','pixels','tag','homePage','position',[30 600 150 60],...
    'NumberTitle','off','menubar','none','toolbar','none','resize','off',...
    'DeleteFcn',@delete_timer);
playButton = uicontrol('parent',homePage,'units','pixels','position',...
    [35 0 20 20],'style','pushbutton','callback',@play_pause,'tag','playButton');
stopButton = uicontrol('parent',homePage,'units','pixels','position',...
    [120 0 20 20],'style','pushbutton','callback',@stopfcn,'tag','stopButton');
startText = uicontrol('parent',homePage,'units','pixels','style','text',...
    'position',[0 0 30 15],'string','Start:','fontWeight','bold',...
    'HorizontalAlignment','left');
stopText = uicontrol('parent',homePage,'units','pixels','style','text',...
    'position',[90 0 30 15],'string','Stop:','fontWeight','bold',...
    'HorizontalAlignment','left');
timingText = uicontrol('parent',homePage,'units','pixels','style','text',...
    'position',[0 30 50 15],'string','Timing(s):','fontWeight','bold',...
    'HorizontalAlignment','left');
timing = uicontrol('parent',homePage,'units','pixels','style','text',...
    'position',[80 30 80 15],'string','0.0     ','fontWeight','bold',...
    'HorizontalAlignment','left','tag','timtext');
%% 状态初始化
si = get(0,'ScreenSize');
if si(3) ==1080
    rate =1;
else
    rate = 1.25;
end
playState = 'idle';
play_pic = imread('play.jpg');
stop_pic = imread('stop2.jpg');
pause_pic = imread('pause.jpg');
set(stopButton,'cdata',stop_pic);
set(playButton,'cdata',play_pic);
setappdata(homePage,'play_pic',play_pic);
setappdata(homePage,'pause_pic',pause_pic);
setappdata(homePage,'playState',playState);
setappdata(homePage,'rate',rate);
function play_pause(~,~)
homePage = findobj('tag','homePage');
playState = getappdata(homePage,'playState');
switch playState
    case 'idle'
        capSize = figure('units','pixels','tag','homePage','name','Modify figure size to start',...
            'NumberTitle','off','menubar','none','toolbar','none','tag','capSize');
        ok_button = uicontrol('parent',capSize,'style','pushbutton','string','Start!','position',...
            [0 0 50 50],'callback',@ready);
        
    case 'pause'
        t = timerfind('name','tim');
        start(t);
        setappdata(homePage,'playState','busy');
    case 'busy'
        t = timerfind('name','tim');
        stop(t);
        setappdata(homePage,'playState','pause');
end
end
function stopfcn(~,~)
homePage = findobj('tag','homePage');
playState = getappdata(homePage,'playState');
if ~isequal(playState,'idle')
    t = timerfind();
    stop(t);
    delete(t);
    setappdata(homePage,'playState','idle');
    timtext = findobj('tag','timtext');
    set(timtext,'string','0.0');
    [file path] = uiputfile('*.gif','File Selection','test.gif');
    try
        path = fullfile(path,file);
        movefile('test.gif', file);
        movefile('test.gif', path);
    end
end
end
function ready(~,~)
global robot
global rectangle
homePage = findobj('tag','homePage');
rate = getappdata(homePage,'rate');
robot = java.awt.Robot;
capSize = findobj('tag','capSize');
capSize = get(capSize,'Position')
capSize(4) = capSize(4)+40;
rectangle = java.awt.Rectangle;
rectangle.x = capSize(1)*rate;
rectangle.y = 1080-(capSize(2)+capSize(4))*rate;
rectangle.width = capSize(3)*rate;
rectangle.height = capSize(4)*rate;
close(findobj('tag','capSize'));
t = timer('StartDelay',1,'ExecutionMode','fixedRate','Period',0.2,'TimerFcn',...
    @repfcn,'name','tim','StartFcn',@timerStart,'StopFcn',@timerStop);
start(t);
end
function repfcn(~,~)
global robot
global rate
global rectangle
robot.createScreenCapture(rectangle);
image = robot.createScreenCapture(rectangle);
w = image.getWidth(); %获取图像宽度
h = image.getHeight(); %获取图像高度
raster = image.getData(); %获取图像RGB数据,返回Raster类的对象
I = zeros(w*h*3,1); %创建存储RGB像素信息的double数组
I = raster.getPixels(0,0,w,h,I); %获取图像一维RGB颜色数组
I = uint8(I); %转换成uint8数据类型
I1 = I(1:3:length(I)); %提取R色一维数组
I1 = reshape(I1,w,h); %转换为R色二维数组
I2 = I(2:3:length(I)); %提取G色一维数组
I2 = reshape(I2,w,h); %转换为G色二维数组
I3 = I(3:3:length(I)); %提取B色一维数组
I3 = reshape(I3,w,h); %转换为B色二维数组
I = uint8(zeros(w,h,3)); %创建存储RGB图像信息三维矩阵
I(1:w,1:h,1) = I1; %导入R色数组
I(1:w,1:h,2) = I2; %导入G色数组
I(1:w,1:h,3) = I3; %导入B色数组
I = permute(I,[2 1 3]);
[I,map]=rgb2ind(I,256);
try
   imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.1);  
catch
    imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.1);
end
timtext = findobj('tag','timtext');
ti = get(timtext,'string');
ti = str2double(ti)+0.2;
set(timtext,'string',num2str(ti) );
end
function delete_timer(~,~)
try
    a = timerfind();
    delete(a);
end
end
function timerStart(~,~)
homePage = findobj('tag','homePage');
pause_pic = getappdata(homePage,'pause_pic');
playButton = findobj('tag','playButton');
set(playButton,'cdata',pause_pic);
setappdata(homePage,'playState','busy');
end
function timerStop(~,~)
homePage = findobj('tag','homePage');
play_pic = getappdata(homePage,'play_pic');
playButton = findobj('tag','playButton');
set(playButton,'cdata',play_pic);
setappdata(homePage,'playState','busy');
end
公開された58元の記事 ウォン称賛69 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_43157190/article/details/104739349