WPF如何绘制无限长的图形或曲线?

mxh0506 2012-02-18 10:34:08
这在以前的立即模式(immediate mode?)绘图方式下根本不是问题, 类似的问题在处理十分庞大的数据库时很常见. 通常的做法是只绘制当前可见的部分, 来提高绘图程序的性能.
但是WPF是一种所谓保留模式(retained mode?)的绘图方式, 该如何处理上述问题呢? 真是百思不得其解. 甚至找不到相关的范例源码. 即使是关于WPF的专著里也没有对此做深入的论述, 最多就是在介绍DrawingVisual的时候捎带提上一两句无关痛痒的话. 最接近的是MSDN managed newsgroup上的这个提问, 但无果而终:
http://objectmix.com/dotnet/121718-drawing-big-object-using-wpf-geometry-scrollviewer.html
大家是否可以互相分享一点这方面的经验? 先谢了.
...全文
263 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mxh0506 2012-02-22
  • 打赏
  • 举报
回复
找到答案了,应该用界面虚拟化技术实现,谢谢各位,结贴。
mxh0506 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sugarbelle 的回复:]
设置图形的坐标相对于边框.
[/Quote]
这句话有点简单,或者太高深了,能否再详细指点一二?

[Quote=引用 4 楼 sp1234 的回复:]
你如何从“庞大的数据库”中去绘制屏幕这个区域的图形的呢?

其实你可以把Cavans看作铺满了很多的Image,每一个都是一块512x512的正方形。既然你会从庞大的数据库中去绘制屏幕这么大区域的图形,那么也就会异步绘制每一个正方形内的图形。而一个正方形再不在屏幕内(虽然它在画布上),则完全可以通过比较画布的相对于屏幕的平移,以及屏幕的可见宽高来得到。

实际上,当一个正方形不再可见了,你就可以把Image上的图形删掉了,这样节省大量资源。
[/Quote]
非常感谢你的耐心回复。我感觉也应该是这种思路,就象google地图那样。不过如果没有你的指点,不会想到这么做。

[Quote=引用 7 楼 crackdung 的回复:]
http://www.visiblox.com/
[/Quote]
那是个卖控件的网站吧?还没有仔细看,是不是它的文档里有相关的实现说明?
  • 打赏
  • 举报
回复
屏幕一堆 --> 平铺一堆


我不知道这叫做么?虚拟的大屏幕?
  • 打赏
  • 举报
回复
哦当然,如果你不是简单地画图,而是要插入更多的子控件,那么就相当于把一个canvas里边屏幕一堆512x512的canvas(可能还需要外边放一个ScrollView),而代替Image。
  • 打赏
  • 举报
回复
你如何从“庞大的数据库”中去绘制屏幕这个区域的图形的呢?

其实你可以把Cavans看作铺满了很多的Image,每一个都是一块512x512的正方形。既然你会从庞大的数据库中去绘制屏幕这么大区域的图形,那么也就会异步绘制每一个正方形内的图形。而一个正方形再不在屏幕内(虽然它在画布上),则完全可以通过比较画布的相对于屏幕的平移,以及屏幕的可见宽高来得到。

实际上,当一个正方形不再可见了,你就可以把Image上的图形删掉了,这样节省大量资源。
crackdung 2012-02-19
  • 打赏
  • 举报
回复
http://www.visiblox.com/
sugarbelle 2012-02-18
  • 打赏
  • 举报
回复
设置图形的坐标相对于边框.
sugarbelle 2012-02-18
  • 打赏
  • 举报
回复
objectmix是msdn的?
mxh0506 2012-02-18
  • 打赏
  • 举报
回复
补充另一个线索:
http://stackoverflow.com/questions/1150060/how-to-draw-line-of-ten-thousands-of-points-with-wpf-within-0-5-second

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧