高分求助:电子地图高速显示问题

solarbear 2003-08-21 06:22:30
我做的电子地图(由点、线、面构成)中使用了双缓冲(先在内存中绘制好后,在拷贝到屏幕上)、使用了API函数中的polyline、polygon函数绘制线和面。
但是当窗口较大的时候,用鼠标拖动地图时,地图的显示就变得非常慢。

请高手帮忙,在vc中绘制点、线、面还有其他更快的函数吗?或者需要使用DirectDraw或者使用OpenGL方法,才能实现平滑和快速的移动、显示地图吗?

我看过“灵图”的开发的电子地图,确实能够实现平滑移动地图,羡慕!但是,使用什么方法实现的呢?
请高手帮忙。
...全文
27 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
albert21c 2003-09-04
  • 打赏
  • 举报
回复
将显示缓冲区中所绘图形转为位图格式,直接bitblt就可以减小抖动了,我试过了,
zzwu 2003-08-23
  • 打赏
  • 举报
回复
说明:

如果只有拖动,而不需要缩放地图,那么可以把地名预先全部画在地图上.

zzwu 2003-08-23
  • 打赏
  • 举报
回复
BlueSky2008() 的看法是对的. 这个方法管用, 且只有这样, 才会有较高的速度.
补充一点: 地名不应写在地图上,否则文字也放大,极不雅观了.绘制好的地图只是一张没有任何地名的地图,要根据截下的区域包含那些街道,再一一填入它们的名称.

整个过程大体这样:

0.预先将大地图存放在内存中,同时用stretchCopy方式缩小后送到屏幕显示区,使其整图显示;
1.当用户从屏幕整图中截取一个局部区域时,系统则从内存的大地图中计算应截下的对应区域,
2.再用stretchCopy方式,将内存区域,进行长宽比相同的缩放后,送到显示缓存区;
3.在显示缓存区中,填写它所包含的街道的名称,
4.将以上填好地名的显示缓存区域转存到显示,
重复1-4

以上0-4或1-4步除了第三步外,都不需要花费很长时间的,
第三步的速度则和数据结构和算法关系密切,应将地名按位置预先排序,用2分法来快速搜索.
solarbear 2003-08-22
  • 打赏
  • 举报
回复
我的电子地图就是使用vc提供的polyline和polygon函数画上去的。
因为数据量很大,即使事先把整个地图都绘制好,这一个过程同样是花费很长的时间,
所以这个方法不管用。
BlueSky2008 2003-08-21
  • 打赏
  • 举报
回复
事先把整个地图都绘制好,放在内存中。拖动时,直接用BitBlt()把相应位置的图片拷贝到屏幕上,就不要再用PolyLine()等现画了。
zzwu 2003-08-21
  • 打赏
  • 举报
回复
不知道你的电子地图的基本实现方法怎样?
是利用纯图形工具实现的? 还是图形之外再加进了图像?

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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