用TeeChar绘制的网线放大后,曲线不平滑,成台阶状,请问如何解决?(100分)

  • 主题发起人 主题发起人 麦苗
  • 开始时间 开始时间

麦苗

Unregistered / Unconfirmed
GUEST, unregistred user!
  或者有没有更好的画线控件?来代替,主要是还要能把曲线上的点能通过鼠标点击或者别的方式能把原来的点报出来。
  比如,我通过TeeChart的LineSeries把压力随时间变化以图形方式绘制出来了,但在实际的使用当中,发现放大后本来应该是比较平滑的斜线,就形成了台阶状态,不美观,而且影响挑点,我说的挑点就是点击曲线,就把x/y的原值报出来。我用的是Delphi7.0上的TeeChart控件。请有经验的网友指点……
  
 
放大!放多大?放到象素级时就是这样的;难道你在学校没学过吗?
曲线是有由线段组成的,线段数越多,曲线就越光滑;
 
  呵呵,我能做程序自然知道放到象素和一般放大的区别……我是工程上用的,它和别的提供的软件在同一坐标下的图形比简直就象是乱的了,别的绘图程序还是比较平滑,明白了吗?我现在考虑是不是TeeChart的绘图机制问题,就是它的放大是采用图形局部拷贝到目标区的方式,而不是我想的重新计算和在新坐标采用点的方式绘制。
 
以下是一个BMP图像的锯齿消除,仅供参考:

Procedure AntiAliasRect(clip: tbitmap; XOrigin, YOrigin,
XFinal, YFinal: Integer);
Var Memo, x, y: Integer; (* Composantes primaires des points environnants *)
p0, p1, p2: pbytearray;

Begin
If XFinal < XOrigin Then Begin Memo := XOrigin; XOrigin := XFinal; XFinal := Memo; End; (* Inversion des valeurs *)
If YFinal < YOrigin Then Begin Memo := YOrigin; YOrigin := YFinal; YFinal := Memo; End; (* si diff俽ence n俫ative*)
XOrigin := max(1, XOrigin);
YOrigin := max(1, YOrigin);
XFinal := min(clip.width - 2, XFinal);
YFinal := min(clip.height - 2, YFinal);
clip.PixelFormat := pf24bit;
For y := YOrigin To YFinal Do Begin
p0 := clip.ScanLine[y - 1];
p1 := clip.scanline[y];
p2 := clip.ScanLine[y + 1];
For x := XOrigin To XFinal Do Begin
p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3]) Div 4;
p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] + p1[(x + 1) * 3 + 1]) Div 4;
p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] + p1[(x + 1) * 3 + 2]) Div 4;
End;
End;
End;
 
谢谢,weilu。我倒是没有在这个Teechart里做更多的工作,就是调用了LineSeries的AddXY。不知道还有什么隐含的属性没有用?要是重头做的话,工作量就大了。
 
chart对于曲线的显示,只是按照你的点。如果你希望放大后曲线圆滑,就把采集压力的频率提高。而且这样给你说吧,既是你把现在的数据间隔缩小100倍,再放大的时候看局部也会出现你说的锯齿。
其实这个也是chart的优点,可以对曲线进行进行无级缩放。
 
对于用鼠标取曲线上的点坐标 偶也很感兴趣啊 比如 把鼠标一放在曲线上就显示时间 压力对应点
 
无风铃,你说的点到曲线上就报出点,这个要编程来实现。因为Series的Click里已经提供了一个ValueIndex参数,利用这个参数,你可以做想要的东西,这个实现起来不难。我是根据这个再在内存链表中找到我要的点,然后显示到一个ListBox里。
zywcd你说的有道理。但我现在的运用就是想平滑些,因为就是在没有缩放的状态下,该出现斜线的地方也是台阶样式的,不知道有没有别的画线工具,可以平滑些的。不然我可能真要重新做这个画线的程序了。
 
谢谢大家,结个分吧。
 
  实际上,我这两天终于发现一个问题,就是横坐标的问题,我为了某种方便,把横坐标设置成DateTime类型的了,问题就出在这里;换成实数类型后,就是我想要的那种平滑的状态了,没有变化的成水平的直线;规律变化的成平滑的斜线,满足了我的要求。希望对大家有一点帮助。毕竟Teechart是一个非常强大的控件。呵呵,我没有必要来重写一个绘曲线图的程序了。我得到了一个类似的程序,很多啊,打印出来就有60多页。本来我还准备了一本John Ayres的《Delphi Win32核心API参考》,看来可以慢慢看了……
 

Similar threads

后退
顶部