scq198501 发表于 2014-12-15 14:00:28

求助:MATLAB里曲线缩放的神奇实现

本帖最后由 scq198501 于 2014-12-15 14:32 编辑

在软件中,我用数组存放了一条曲线,曲线放大可以采用差值的办法,曲线缩小呢?有什么好的办法能保留曲线信息不失真吗?感觉就像是降低了采样频率,
这个是原始曲线,
直接缩小,人为加的误差点没有显示到,失真了
matlab里的原始曲线
缩小后的原始曲线,怎么缩小都没有失真
有人清楚这个要怎么做吗???

varding 发表于 2014-12-15 14:34:46

降采样就间隔n个点取一个画上去就行了

varding 发表于 2014-12-15 14:36:08

哦,你说加的那个点啊,贴图的时候用拉伸的方式就行了,不要自己做降采样

scq198501 发表于 2014-12-15 14:43:52

varding 发表于 2014-12-15 14:36
哦,你说加的那个点啊,贴图的时候用拉伸的方式就行了,不要自己做降采样 ...

在软件里是用LineTo画线的方式,来把采样点化出来的。画实时曲线,用贴图怎么实现?

varding 发表于 2014-12-15 14:45:52

具体做法就是用内存dc画好图然后用StretchBlt贴到目标dc上
给你几个参考的:
http://blog.csdn.net/surfingant/article/details/17298421
http://msdn.microsoft.com/en-us/library/windows/desktop/dd145120(v=vs.85).aspx
http://stackoverflow.com/questions/9079579/stretchblt-shrink-corruption

varding 发表于 2014-12-15 14:52:19

scq198501 发表于 2014-12-15 14:43
在软件里是用LineTo画线的方式,来把采样点化出来的。画实时曲线,用贴图怎么实现? ...

是的,这样波形都是用LineTo实现的,你可能直接在目标控件的dc上画图,这样画图会有闪烁而且也没法实现你的图像拉伸操作

这样绘图都需要用双缓冲,说白了就是在内存里把整个图像画好了(也是用LineTo,MoveTo等操作)然后把绘制好的图像一次性贴到目标控件的dc上,这样就不会闪烁,而且也可以实现你的拉伸操作

双缓冲可以看看这个文章,目前你看前面1-6就行了,遇到问题了再看后面

http://blog.csdn.net/shanzhizi/article/details/7761894

scq198501 发表于 2014-12-15 15:11:37

varding 发表于 2014-12-15 14:52
是的,这样波形都是用LineTo实现的,你可能直接在目标控件的dc上画图,这样画图会有闪烁而且也没法实现你 ...

我软件里是用的双缓冲技术,只不过拷贝用的是bitblt函数,没有用stretchblt函数。如果数据缩小100倍,那内存中的位图不是要用100倍的屏幕大小?这样再缩放回去?

varding 发表于 2014-12-15 15:19:16

scq198501 发表于 2014-12-15 15:11
我软件里是用的双缓冲技术,只不过拷贝用的是bitblt函数,没有用stretchblt函数。如果数据缩小100倍,那 ...

用stretchblt代替bitblt贴图就行
我觉得matlab应该也是把实际的图画出来再缩小贴上去的,不然他无法对各种不同特征的数据进行降采样画图
页: [1]
查看完整版本: 求助:MATLAB里曲线缩放的神奇实现