chart的addxy()画图,怎么把数据导入虚拟内存去操作addxy()?操作完成,怎么释放??
请给个具体的例子吧??
比如:
t:=0; //实型数据
for i:=0 to 87459211 do
begin
t:=t+0.01 //单位是秒(s)
for j:=0 to 3 do
chart1.series[j].addxy(t,random(i)); //怎么导入虚拟内存去操作??
end;
请大家帮助,很急的!!
请给个具体的例子吧??
比如:
t:=0; //实型数据
for i:=0 to 87459211 do
begin
t:=t+0.01 //单位是秒(s)
for j:=0 to 3 do
chart1.series[j].addxy(t,random(i)); //怎么导入虚拟内存去操作??
end;
请大家帮助,很急的!!
这是一个画曲线图的小程序。
首先,有87459212个数据要画在chart上;
其次,chart上有4条曲线呀!这四条曲线的时间是相同的(即是x轴),y轴不同是随机数,实型的。 我的意思:把画图这句或者这整个代码段怎么放入虚拟内存去操作????
生成bmp文件结构?
还是更新 对应的控件你清楚数据结构 如何读入 何时读入自己控制就好了内存一般是delphi自己分配的 你不用管
离屏技术,是什么?
实质上,就使用delphi的chart画曲线图,因为数据太大,画图的时候十分占内存,出现溢出,而且速度也很慢。我不知道怎么解决?所以考虑把虚拟内存使用起来或者用内存不累加,叠加方式,就是取一部分放入内存画完图后,释放掉,又调同样大小的一块数据到内存,画完图,同上操作,大家有没有做过,请赐教吧。谢谢
上面这是我的想法,不知道怎么实现??
我现在就是使用的你第二种方法丢点画图,不完美,因为丢点多了当把图形放大后就发现图形出现差异,还有数据错误。数据之大,最大考虑1亿个数据点。而且要求在一个chart屏幕上显示所有。其实,最初看见这个庞大数据时,我考虑使用的分段画图,就是把所有数据分成很多屏,而且只在最后一屏显示,其他就通过左右移动来查看(放大、缩小和还原),当前要显示的那屏就画图,不显示的就清空画图。这样做,速度很快,效率高,但是不利于查看整个图形里数据实际意义。放弃了
当前显示的是所有点,比如1亿个点所描绘出来的图形。
车速、里程的每个点,10毫秒取一个点。看车辆一个月运行的情况,实际就是在图形上的反映呀。
对数据处理上,有好的点子吗?请赐教。谢谢
存储上参照下读取的方式。。 或者直接存储的时候生存图。 这样可以大大缩减运行的时候循环
看图就不要用chart了 可以考虑用gdi api
分成小图 不同比例缩放的 图读取的时候可以快很多。。
像google map的静态图。。
在chart里,能显示的,只是图形数据比较密集。所以要看某一段,用游标放在该部分,放大呀。每条曲线是清晰的。在chart里画图随着数据增加,图形不断收拢嘛。
你要费用 chart的画就是在 生成数据的同时 直接生成chart。。
程序使用的时候直接 读chart
你研究下chart 控件
2研究下chart 直接在生成数据的时候 写chart 对象 保存成磁盘文件。。
1.是不是不用chart画图?那用什么控件呢?
2.没有理解。chart直接生成数据?什么意思嘛?chart不是使用addxy添加点的吗?
3.chart理解确实不深,初用啊。摆脱帮助,谢谢,我在线等着的,急的
http://www.99inf.net/SoftwareDev/Delphi/36429.htm
我知道你的意思是要一次把所有数据全添加进chart,然后就可以左右拉动,放大、缩小显示了。数据量小是可以的,但是数据量太大,就不能这么做了,只能把数据放在内存或文件中,每次只添加当前需要的部分到chart,然后根据需要把当前添加的数据清掉再加新的。
第一种方法,TChart.Series[].clear; 再重新+添加点。
第一种方法,TChart.Series[].XValues[]、TChart.Series[].YValues[]直接修改点。
var
i: integer;
begin
for i := 0 to 9 do
Chart1.Series[0].AddXY(i, i);
Chart1.Repaint;
end;procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to Chart1.Series[0].Count - 1 do
begin
Chart1.Series[0].XValues[i] := i;
Chart1.Series[0].YValues[i] := 100 - i * 10;
end;
Chart1.Repaint;
end;
你可以考虑一下在 BMP 上画图,然后显示出来。
用户要哪段,你就画哪段。
这样比 Chart 要高效很多。
画在BMP上,静态的吧。难不成只是解决查看,不操作,要操作放大看某一部分,就把该部分放在chart里画图吗?可以考虑一下。我试试
时时采点画图,多少数据,是累加每天吗?可以把软件给我看看吗?
邮箱:[email protected]
谢谢
其实,你说的方法,我都做过一个版本了,老总要求更新,要求一次加入所有点。
还有地图的方案,我也考虑了的。静态的BMP图形也实现了的,老总都不认可。
毕竟这个类似的软件,以前的同事做过,老总也用过,他认为能一次性解决所有数据。而我却是新手,无赖。谢谢大家肯帮助!!
b一次读取1亿个
过一定时间 b 赋值给 a。可惜 chart无源码 不知道具体的 数据结构。