求教 C# 绘图问题

2020-11-06 14:28:16 +08:00
 iSNN

老师给的一个课题:

用 C# 实现一个路况图,不需要 GIS 那样的,会给出道路的信息(横竖或者 45°这种简单的直线)和红绿灯,还有车辆的实时位置,车最多给十辆吧。要有缩放和拖动功能,1 秒刷一次

各位大佬有什么好的方案吗...

我现在是用 Graphics 来做的,Bitmap 手动做的二级缓存,缩放试过了 graphics 的 ScaleTransform,试过了构造函数直接给个新 size 再 new 一个 bitmap 来,试过了 drawimage 来缩放,但是效率都太低了,太卡了。调了 BitBlt 也还是太慢。

请问各位大佬有好的方案吗?

1945 次点击
所在节点    程序员
29 条回复
kokutou
2020-11-06 16:51:24 +08:00
套个 cef 用网页画。。。

其他的手画遇到 hidpi 缩放就跪了啊。。。
GM
2020-11-06 17:09:07 +08:00
@iSNN 那当然了,图片缩放很慢的,慢得惨无人寰。想要快,事先准备好各种比例的图片,直接 draw 上去,别缩放。
binsys
2020-11-07 09:45:35 +08:00
CefSharp(或 CefGlue) 壳,跑 HTML 版本的 Leaflet openlayers d3 等,在 Leaflet openlayers 上做。
iSNN
2020-11-13 09:48:34 +08:00
@MinQ 谢谢大佬的指点...这几天学了 WPF 的东西,图基本上是画出来了。但是遇到了个问题,我是用 Shapes 里面的图形去画的,道路就是 Line,信号灯就是 Ellipse......不过这些东西都会有一些其他属性,但是这些类都是 sealed 密封类不能继承。我现在就是把这些无法用 Shapes 表示的属性写个类来存储放在一个数组里,然后把道路啊信号编上 Name,然后根据 Name 去数组匹配.......比如一个事件的监听,从 sender 得到 Name,然后 for 数组找匹配的对象,在根据对象里的属性显示不同的东西。请问大佬有好的解决方案吗
MinQ
2020-11-13 12:15:32 +08:00
@iSNN 写个新类继承 shape 呗,把想要的属性加上
MinQ
2020-11-13 12:15:47 +08:00
@iSNN 控件同理
iSNN
2020-11-13 13:36:29 +08:00
@MinQ 我也这样想过...但是那些图形的实现我也是不明白,去 referencesource.microsoft.com 找的代码,发现掉了很多 internal 的东西。那就算了吧,找了下 Dictionary 的效率挺不错的,不用数组了,这样效率应该不慢
MinQ
2020-11-13 13:58:47 +08:00
@iSNN extends 下来以后会直接把父类的方法都继承了啊,根本不需要再写一遍
MinQ
2020-11-13 13:59:34 +08:00
@MinQ 我 github 上有个 AGVMonitor,你参考一下吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/722397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX