在显示飞溅屏幕期间,等待鼠标点击事件的Matlab

时间:2014-10-13 16:19:21

标签: matlab

大家好我对以下代码有疑问:

im = imread('hans65.tif');

f = figure('visible','off');
imshow(im, 'Border', 'tight');
rectangle('Position', [950, 500, 20, 80], 'EdgeColor','k', 'FaceColor','k')
rectangle('Position', [920, 530, 80, 20], 'EdgeColor','k', 'FaceColor','k')

% rectangle('Position', [400, 100, 10, 10]);
% rectangle('Position', [600, 100, 10, 10]);

set(gcf,'PaperPositionMode','auto')
print(f, '-dpng', 'hans12.png');

% splash('hans12','png',10000);
splash('hans12','png',5000);

目前代码正在将图片加载到matlab中。 更改图片并在启动画面中显示已安全的图片。

我现在想做的是:

在我看到启动画面的过程中,按下鼠标右键或左键可以看到另一个启动画面(右侧pic1和左侧pic2)。 我在互联网上搜索但找不到任何解决方案。

欢呼你们!

我试过了:

function main

im = imread('hans65.tif');
f = figure('visible','off'); imshow(im, 'Border', 'tight');
rectangle('Position', [950, 500, 20, 80],...
 'EdgeColor', 'k',...
 'FaceColor','k')

rectangle('Position', [920, 530, 80, 20],...
 'EdgeColor', 'k',...
 'FaceColor','k')

rectangle('Position', [400, 100, 10, 10]);
rectangle('Position', [600, 100, 10, 10]);
set(gcf,'PaperPositionMode','auto')
print(f, '-dpng', 'hans12.png');

s = SplashScreen( 'Splashscreen', 'hans12.png');

set(s, 'buttondownfcn', @clicky);



function clicky(gcbo, eventdata, handles)
pause(4)
delete(s)

现在我收到此错误消息:

名称'buttondownfcn'不可访问 类的实例的属性 '溅射屏幕'。

我不知道如何解决这个错误。干杯

1 个答案:

答案 0 :(得分:0)

好的,我明白了。由于看起来你至少有一些编程经验,所以我不会深入细节。

在这个link中,您可以看到使用回调函数的类。你需要做的是访问你的SplashScreen对象的matlab“plot object”(我的意思是matlab在你的child中识别为figure的对象)的句柄。该对象是必须删除的对象。

更实际的是,buttondownfunction需要应用于图fclicky内,您需要删除保存图像的对象(这是一个matlab对象)。这将引用plottable对象,它很可能是SplashScreen的成员变量。最简单的方法应该是声明您的SplashScreen数组(或结构?)全局,这意味着您可以从clicky内轻松访问它。否则,您需要做一些工作来设置正确的gui并使用handles输入(回调函数中的第三个输入)来访问您的SplashScreen数组/结构。然后,让SplashScreen对象具有 handle 成员(图中的句柄)以及 position (多边形?)。当然,你可以有更多的成员,但这些都是必要的。

如果在触发clicky时鼠标位于多边形内部,则删除图中的句柄并将成员变量设置为,例如NaN(因为在matlab中不存在null。这在matlab中不是必需的,但是很好实践是永远不会有引用不引用的东西)。然后删除SplashObject(因为它不再使用)。

完成后,请务必使用clear global删除全局变量,因为正常的clearclear all并不能完全清除全局变量。

希望这有效。否则请评论。