- 积分
- 0
- 注册时间
- 2009-2-18
- 仿真币
-
- 最后登录
- 1970-1-1
|
由于数据量太大,最近要制作一个滚动条来显示。一下是我从萝卜的博客转过来的,具体是哪一页的忘了,萝卜兄请见谅了,只好把博客地址贴出来了:
:http://luobo.ycool.com/archive.html
其代码如下:(我把不太重要的省略了,方便大伙迅速看完)
rand('state',0);
X=rand(100,100);
% imshow(X,[])
imshow(X);
yy=ylim;
axis on
% set(gcf,'position',[154 42 654 571])
aa=get(gca,'position');
sss=uicontrol(gcf,'style','slider',...
%这中间我就省略了,是一些设置slider属性的代码
'value',0.5,'callback',['aa=get(sss,''value'');',...
'set(gca,''ylim'',round(200*(aa-0.5))+yy);']);
%%%%%%
对于这一句'callback',['aa=get(sss,''value'');', 'set(gca,''ylim'',round(200*(aa-0.5))+yy);']); 有些疑问很是不解,不好意思,刚接触GUI不久。aa=get(sss,'value')应该是实时更新slider的位置值,'ylim'应该是[ymin,ymax],但后面的round(200*(aa-.5))是一个近似值,每一次点击移动的增量,而yy是一个矩阵,yy=ylim,它们是怎么相加的??我仿着自己也做了一个,老不行,最后没办法我想这样实现:set(gca,'xlim',[a1 b1],'ylim',[a2 b2]);可以是可以但只能把坐标增加,没法回来。??请教了。。。。耽误大家时间了
我对于做滚动条的想法:比如横向滚动条,assume:[xmin xmax]=[100 200];先get这个值作为比较的值,即固定这个值和get一个slider的值,如0,不让它随get(gca,'value')而更新,then a=get(silder,'value')来real-time update the slider value. step=a,,增量=step*xmin and *xmax,,,finally;::set(gca,'xlim',[增量+[100 200]]),,,不知道我这样对不对,我按这做的效果前面已说了,可能是我的代码出问题了。。
为了方便我还是把完整代码贴上来:(可以直接运行,,)
figure;
rand('state',0);
X=rand(100,100);
imshow(X,[]);
yy=ylim;
axis on
set(gcf,'position',[154 42 654 571])
aa=get(gca,'position');
sss=uicontrol(gcf,'style','slider',...
'unit','normalized','position',...
[aa(1)+aa(3),aa(2),0.05,aa(4)],...
'BackgroundColor',[0.6 0.6 0.6],'ForegroundColor','r',...
'string','color','fontsize',14,'SliderStep',[0.01 0.02],...
'value',0.5,'callback',['aa=get(sss,''value'');',...
'set(gca,''ylim'',round(200*(aa-0.5))+yy);']); |
|