目的: imshow で表示された画像を含む 1 つの Figure で複数のクリックを実行し、「クリックされた」ポイントの座標を保存して、以降の操作で使用すること。
注:関数については知っています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
ですか?これは良いアプローチですか?
どうもありがとう。
EDIT1: シャイさん、回答ありがとうございます。しかし、私はまだ私が意図したことを達成することはできません.
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
このコード(バグがあります!)は、私が望むものに最も近いものです(すべてクリックした後、クリックされたポイントのx座標とy座標の配列を持っています)。このタスクを実装するためのメカニズムを明らかに理解していません。何か助けはありますか?