作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目标:在一个图中执行多次点击,包含一个用 imshow 显示的图像并保存“点击”点的坐标,以用于进一步的操作。
备注:我知道这些功能 getpts
/ginput
但我想在不使用它们的情况下执行此操作。这是否可以使用 ButtonDownFcn
? (见下面的代码)
function testClicks
img = ones(300); % image to display
h = imshow(img,'Parent',gca);
set(h,'ButtonDownFcn',{@ax_bdfcn});
function ax_bdfcn(varargin)
a = get(gca,'CurrentPoint');
x = a(1,1);
y = a(1,2);
x
和
y
只有“活”在里面
ax_bdfcn
.
testClicks
中可用功能?这是否可以使用
ButtonDownFcn
?这是一个好方法吗?
function [xArray, yArray] = testClicks()
img = ones(300); % image to display
h = imshow(img,'Parent',gca);
x = [];
y = [];
xArray = [];
yArray = [];
stop = 0;
while stop == 0;
set(h,'ButtonDownFcn',{@ax_bdfcn});
xArray = [xArray x];
yArray = [yArray y];
if length(xArray)>15
stop = 1;
end
end
function ax_bdfcn(varargin)
a = get(gca, 'CurrentPoint');
assignin('caller', 'x', a(1,1) );
assignin('caller', 'y', a(1,2) );
end
end % must have end for nested functions
最佳答案
有几种方式
function testClicks
img = ones(300); % image to display
h = imshow(img,'Parent',gca);
set(h,'ButtonDownFcn',{@ax_bdfcn});
x = []; % define "scope" of x and y
y = [];
% call back as nested function
function ax_bdfcn(varargin)
a = get(gca,'CurrentPoint');
x = a(1,1); % set x and y at caller scope due to "nested"ness of function
y = a(1,2);
end % close nested function
end % must have end for nested functions
assignin
function ax_bdfcn(varargin)
a = get(gca, 'CurrentPoint');
assignin('caller', 'x', a(1) );
assignin('caller', 'y', a(2) );
'UserData'
图形句柄的属性function ax_bdfcn(varargin)
a = get(gca, 'CurrentPoint');
set( gcf, 'UserData', a(1:2) );
'UserData'
可以使用 cp = get( gcf, 'UserData');
访问(只要该图还活着) . 'base'
的方法示例工作空间
function ax_bdfcn(varargin)
a = get(gca,'CurrentPoint');
% the hard part - assign points to base
if evalin('base', 'exist(''xArray'',''var'')')
xArray = evalin('base','xArray');
else
xArray = [];
end
xArray = [xArray a(1)]; % add the point
assignin('base','xArray',xArray); % save to base
% do the same for yArray
testClicks
没有
xArray
或
yArray
工作区中的变量(至少不应该)。在第一次点击后,这两个变量将“奇迹般地”被创建。每隔一次单击后,这两个数组将增加它们的大小,直到您关闭图形。
关于MATLAB:如何使用 ButtonDownFcn 存储点击的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15202236/
我会写一个例子,这样你就可以理解我了: 例如,我有这 3 个点:(0, 1, 244) - (0, 1, 255) - (1, 2, 133) 实际上,当 2 个点具有相同的 (x, y) 时,我需要
我是一名优秀的程序员,十分优秀!