m******u 发帖数: 153 | 1 正在做图像处理的GUI.在图像A里加一条线,可以移动,每次移动更新图像B
我现在用Matlab实现,这条可以移动的线有一个handle,所以当butt
onpress的事件被抓获后,Matlab 就调用相应的程序来更新图像B。
现在问题是Matlab实现太慢。
我的鼠标移动了2-3个来回,都放在别的地方了,这条线才慢慢的来回挪动(这是图
像B在即时更新),整个迟4-5秒,如果我移动鼠标过快的话。感觉非常不爽。
我把这条线的"queue"设成"cancel",就是程序太忙得时候,就不用响
应鼠标移动了,看来不是这么回事。。??
请问改用什么软件来实现这个功能可以快一些?
网上搜索了一下,免费的有Java, QT,现在VC也免费了。
我碰过Java和VC十来天。如果想实现这个功能,该用哪个函数?我好直接去查函
数去。
多谢。 |
c*u 发帖数: 916 | 2 我用MATLAB GUI干同样的事情很快啊,感觉不出任何迟滞,可能你的程序有问题,贴上
来看看,不过我的图B只有700*700 pixel, 在GUI上只有1/2屏幕大。如果你的是2000*
2000,那我就不知道了,
关键的问题是更新图像B和线的时候不可以用image()或者plot(),而是只更新数据,如
果你有什么hold on, 那就更糟糕了,
如果你那个程序本身很慢,那你就让那程序只在button_up的时候运行,
【在 m******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 正在做图像处理的GUI.在图像A里加一条线,可以移动,每次移动更新图像B : 我现在用Matlab实现,这条可以移动的线有一个handle,所以当butt : onpress的事件被抓获后,Matlab 就调用相应的程序来更新图像B。 : 现在问题是Matlab实现太慢。 : 我的鼠标移动了2-3个来回,都放在别的地方了,这条线才慢慢的来回挪动(这是图 : 像B在即时更新),整个迟4-5秒,如果我移动鼠标过快的话。感觉非常不爽。 : 我把这条线的"queue"设成"cancel",就是程序太忙得时候,就不用响 : 应鼠标移动了,看来不是这么回事。。?? : 请问改用什么软件来实现这个功能可以快一些? : 网上搜索了一下,免费的有Java, QT,现在VC也免费了。
|
m******u 发帖数: 153 | 3 我是直接update CData的。但是我用了hold on.因为图B要显示一张图像和一条线,所
以必须用hold on.
这种情况下怎么办呢?多谢。
【在 c*u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我用MATLAB GUI干同样的事情很快啊,感觉不出任何迟滞,可能你的程序有问题,贴上 : 来看看,不过我的图B只有700*700 pixel, 在GUI上只有1/2屏幕大。如果你的是2000* : 2000,那我就不知道了, : 关键的问题是更新图像B和线的时候不可以用image()或者plot(),而是只更新数据,如 : 果你有什么hold on, 那就更糟糕了, : 如果你那个程序本身很慢,那你就让那程序只在button_up的时候运行,
|
c*u 发帖数: 916 | 4 这个很简单,没有人强迫你用hold on,
1。画线不一定要用plot(),如果你用 line(),那么就不会冲掉原来的东西。
2。如果你坚持要用plot(),(虽然没有任何理由这么做),那么至少你知道对应hold
on, 有一个hold off,在合适的地方加入hold off,或者手动把前一个图像删除掉。关
键是你不要用hold on产生好几个重叠的图像,要不然所有这些图像堵在显存里,想不
慢也不可能了,
【在 m******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我是直接update CData的。但是我用了hold on.因为图B要显示一张图像和一条线,所 : 以必须用hold on. : 这种情况下怎么办呢?多谢。
|
m******u 发帖数: 153 | 5 谢谢。
我取消了hold on, plot,用line。
还是一样的慢,有迟滞现象。
我以前用hold on,在axes B上也只始终画两个objects,一个是图像,一个是一条线。
然后每次用set data来更新图像和线。
没有用hold on产生好几个重叠的图像。觉得hold on不是关键。
发信人: cxu (Salmon Fish), 信区: EE
标 题: Re: 正在做图像处理的GUI.在图像A里加一条线,可以移动,每次
发信站: BBS 未名空间站 (Tue Jul 22 09:35:32 2008)
这个很简单,没有人强迫你用hold on,
1。画线不一定要用plot(),如果你用 line(),那么就不会冲掉原来的东西。
2。如果你坚持要用plot(),(虽然没有任何理由这么做),那么至少你知道对应hold
on, 有一个hold off,在合适的地方加入hold off,或者手动把前一个图像删除掉。关
键是你不要用hold on产生好几个重叠的图像,要不然所有这些图像堵在显存里,想不
慢也不可能了,
【在 m******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我是直接update CData的。但是我用了hold on.因为图B要显示一张图像和一条线,所 : 以必须用hold on. : 这种情况下怎么办呢?多谢。
|
c*u 发帖数: 916 | 6 把code 贴上来,除非你的处理程序本身很慢, 要不然不可能因为画一个图和一条线而变
得很慢的.
【在 m******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 谢谢。 : 我取消了hold on, plot,用line。 : 还是一样的慢,有迟滞现象。 : 我以前用hold on,在axes B上也只始终画两个objects,一个是图像,一个是一条线。 : 然后每次用set data来更新图像和线。 : 没有用hold on产生好几个重叠的图像。觉得hold on不是关键。 : 发信人: cxu (Salmon Fish), 信区: EE : 标 题: Re: 正在做图像处理的GUI.在图像A里加一条线,可以移动,每次 : 发信站: BBS 未名空间站 (Tue Jul 22 09:35:32 2008) : 这个很简单,没有人强迫你用hold on,
|
m******u 发帖数: 153 | 7 我用profile找到原因了。
我用了一句多余的axes(h)。这句就浪费了很多时间。
多谢多谢探讨。
【在 c*u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 把code 贴上来,除非你的处理程序本身很慢, 要不然不可能因为画一个图和一条线而变 : 得很慢的.
|
c*u 发帖数: 916 | 8 axes(h)本身并不浪费时间, 调用axes(h)的时候,系统默认对原来的axes调用drawnow
,把显存flush出去,可能是那个drawnow花了很多时间,所以恐怕你的问题还是没有解
决掉。
【在 m******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我用profile找到原因了。 : 我用了一句多余的axes(h)。这句就浪费了很多时间。 : 多谢多谢探讨。
|