Matlab 版 (精华区)

发信人: zjliu (秋天的萝卜), 信区: Matlab
标  题: 动态显示鼠标的坐标值和图像像素值 zz
发信站: 哈工大紫丁香 (Thu Dec 25 16:05:19 2003), 站内信件

发信人: Genial (山城棒棒儿军), 信区: MathTools
标  题: 动态显示鼠标的坐标值和图像像素值 zz
发信站: 饮水思源 (2003年12月19日00:19:10 星期五), 站内信件

对于动态显示鼠标的坐标值和像素值,在其他语言如vc,vb中都比较方便,有直接的着方
面的函数,那么在matlab图像处理里面又如何实现呢?
具体的实现方法很多,但归结起来就是获取坐标轴的current point 属性值,我这里给
出的一个函数是从mathworks 获取柄稍作修改后的结果,相信对做图像处理的朋友有一
定的作用。另一个就是自带的pixval函数。谁有不同的实现方法,请多多共享啊!

function dynpoint(arg,h)
% Show the coordinates of a plot dynamically
%
% To start use:
% dynpoint(h)
% where h is a handle to a figure, axes or e.g. line.
%
% To delete use:
% dynpoint('delete',h)
% where h is a handle to a figure, axes or e.g. line.
% (you may also use: dynpoint delete)
%
% There can only be one dynamic plotter in a figure at a time.
%
% Example:
% subplot(211), hline = plot(sin(1:10))
% subplot(212), plot(sin(1:100))
% dynpoint(hline)

% 2002,6.29

if ~exist('arg','var')
    arg = gcf;
end

if ~isstr(arg)
  handle = arg;
  arg = 'init';
end

switch arg
case 'init'
    if ~ishandle(handle)
        error('h is not a handle')
    end

    [h,ax] = h2hax(handle);

    % delete old dynamic text object
    ht = findobj(h,'tag',[mfilename '_text']);
    if any(ht)
        delete(ht)
    end

    % text window at the bottom left corner
    % text in centred
    uicontrol(h,...
        'style','text',...
        'pos',[2 2 200 15],...
        'tag',[mfilename '_text'],...
        'userdata',ax(1))

    % do the dynamic thing...
    set(h,'windowbuttonmotionfcn',[mfilename ' move'])

case 'move'
    ht = findobj(gcbf,'tag',[mfilename '_text']);
    ax = overobj('axes');
    if ~any(ax)
        ax = get(ht,'userdata');
    end
    p = get(ax,'currentpoint');
    set(ht,'string',sprintf('(%g, %g)', p(1), p(3)));

case 'delete'
    if ~exist('h','var')
        h = gcf;
    end
     [h,ax] = h2hax(h);
    set(h,'windowbuttonmotionfcn','')

    ht = findobj(h,'tag',[mfilename '_text']);
    delete(ht)

end

% ----------
function [h,ax]=h2hax(handle)

typ = get(handle,'type');
if strcmp(typ,'figure')
    h = handle;
    ax = findobj(h,'type','axes');
elseif strcmp(typ, 'axes')
    h = get(handle,'parent');
    ax = handle;
elseif strcmp( get(get(handle,'parent'), 'type'), 'axes' )
    ax = get(handle,'parent');
    h = get(ax,'parent');
end

--
╔═══════════════════╗
║★★★★★友谊第一  比赛第二★★★★★║
╚═══════════════════╝

※ 来源:.哈工大紫丁香 bbs.hit.edu.cn [FROM: 202.118.229.162]
※ 修改:·zjliu 于 Apr 27 20:19:04 修改本文·[FROM: 202.118.229.162]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.159毫秒